繁体   English   中英

ggplot的饼图geom_text()标签隐藏了由geom_bar()制作的饼图

[英]ggplot's geom_text() labelling of pie chart hides the pie made by geom_bar()

我使用聚合(,, FUN = sum)函数构造了以下数据:

    structure(list(Group.1 = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 
1L, 2L, 3L), .Label = c("Black or African American", "White Alone", 
"White Alone LR"), class = "factor"), Group.2 = structure(c(1L, 
1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), .Label = c("bus", "mixed", "rail"
), class = "factor"), x = c(75143.5182835844, 198737.537113379, 
46973.6469041183, 46199.2335265697, 128026.568239224, 28933.3028730992, 
75876.5845180076, 495166.957025367, 5909.04640985574), pos = c(37571.7591417922, 
99368.7685566897, 23486.8234520592, 98243.1350468693, 262750.821232991, 
61440.2983406679, 159281.044069158, 574347.583865287, 78861.4729821454
), labe = c(" 75,144", "198,738", " 46,974", " 46,199", "128,027", 
" 28,933", " 75,877", "495,167", "  5,909")), class = c("tbl_df", 
"tbl", "data.frame"), .Names = c("Group.1", "Group.2", "x", "pos", 
"labe"), row.names = c(NA, -9L))

我在这里这里得到了一个很好的代码来制作一个饼图,这导致了这个:

modesplit <- ggplot(data = sums) +
  geom_bar( aes(factor(1), y=x, fill=Group.2), stat="identity", position="fill") +
  scale_fill_discrete(guide=guide_legend(title="Mode")) +
  coord_polar(theta="y") +
  facet_grid(.~Group.1, labeller = label_value) + 
  scale_x_discrete(name=" ", breaks = NULL) +
  scale_y_continuous(name=" ", breaks = NULL)
plot(modesplit)

饼图很好

但是,当我尝试添加标签时:

modesplit <- ggplot(data = sums) +
  geom_bar( aes(factor(1),y=x,fill=Group.2),stat="identity", position="fill") +
  geom_text(aes(,y=pos, label = labe), size =5) +
  scale_fill_discrete(guide=guide_legend(title="Mode")) +
  coord_polar(theta="y") +
  facet_grid(.~Group.1,labeller = label_value) +
  scale_x_discrete(name=" ", breaks = NULL) +
  scale_y_continuous(name=" ", breaks = NULL) +
plot(modesplit)

饼图的“馅饼”消失了: 坏馅饼

我试过了:

  1. 去除鳞片
  2. 删除scale_fill_discrete

这是一个规模问题。 注释掉coord_polar和你的scale_y_continuous ,然后使用和不使用geom_text运行代码。 geom_bar中的position = "fill"使得加起来为1,而你的pos值则为数万。

这是一个解决方案( 编辑所以它现在很好地将标签放在中间)

library(dplyr)
sums2 = sums %>% group_by(Group.1) %>%
    mutate(x_scaled = x / sum(x),
           pos_scaled = pos / cumsum(x_scaled) - x_scaled / 2)

modesplit <- ggplot(data = sums2, aes(x = factor(1))) +
  geom_bar( aes(y=x_scaled, fill=Group.2), stat="identity", position="stack") +
  scale_fill_discrete(guide=guide_legend(title="Mode")) +
  coord_polar(theta="y") +
  geom_text(aes(y = pos_scaled, label = labe), size =5) +
  facet_grid(. ~ Group.1, labeller = label_value) + 
  scale_x_discrete(name=" ", breaks = NULL) +
  scale_y_continuous(name=" ", breaks = NULL)

plot(modesplit)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM