计算 XY 极坐标以将对象放置在值标签的正下方

San*_*eso 5 math visualization r data-analysis ggplot2

考虑以下数据集:

ig_5 <- data.frame(
  category = c("A", "B", "C", "D", "E", "F"),
  prop = c(0.1, 0.2, 0.15, 0.25, 0.05, 0.25)
) %>%
  mutate(lab.ypos = cumsum(prop) - 0.5*prop)
Run Code Online (Sandbox Code Playgroud)

我使用以下代码创建了一个圆环图:

ggplot(ig_5, aes(x = 2, y = prop, fill = prop)) +
  geom_bar(stat = "identity", color = "white") +
  coord_polar(theta = "y", start = 0) +
  geom_text(aes(y = lab.ypos, label = prop), color = "black", size = 5) +
  xlim(.5, 2.5)
Run Code Online (Sandbox Code Playgroud)

可以看到,值标签放置在每个类别的中间。现在,我需要将数字放置在每个值标签的正下方。我不能只是将新对象粘贴到值中,因为文本和图形的颜色不同。因此,我想应该有一种方法可以使用值标签的坐标(x = 2,y = lab.ypos = cumsum(prop) - 0.5 * prop)来根据我的需要定位数字。

我使用 geom_label 添加了新图形,并为其指定了与值标签的 XY 坐标成比例的位置。然而,我还没有成功。这是我尝试过的一个例子。

ig_5 <- data.frame(
  category = c("A", "B", "C", "D", "E", "F"),
  prop = c(0.1, 0.2, 0.15, 0.25, 0.05, 0.25)) %>%
  mutate(lab.ypos = cumsum(prop) - 0.5*prop, 
         lab.ypos2 = cumsum(prop) + 0.3*prop)

 
ggplot(ig_5, aes(x = 2, y = prop, fill = prop)) +
  geom_bar(stat = "identity", color = "white") +
  coord_polar(theta = "y", start = 0) +
  geom_text(aes(y = lab.ypos, label = prop), color = "black", size = 5) +
  geom_label(aes(y = lab.ypos,
                 x = c(1.85, 2.1, 2.2, 1.95, 1.8, 1.85),
                 label = "figure"), 
             color = 'red') +
  xlim(.5, 2.5) 
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:

结果

Gre*_*gor 3

我们可以滥用vjust垂直对齐标签超出正常的 0 到 1 范围。无论坐标系如何,这都会在视觉上垂直移动标签。有效的数量可能取决于输出的尺寸 - 只需尝试值直到有效:)

ggplot(ig_5, aes(x = 2, y = prop, fill = prop)) +
  geom_bar(stat = "identity", color = "white") +
  coord_polar(theta = "y", start = 0) +
  geom_text(aes(y = lab.ypos, label = prop), color = "black", size = 5) +
  geom_label(aes(y = lab.ypos,
                 label = "figure"), 
             vjust = 1.5,
             color = 'red') +
  xlim(.5, 2.5)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述