加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

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

发布时间:2020-12-14 23:25:46 所属栏目:资源 来源:网络整理
导读:我使用聚合(,FUN = sum)函数构造了以下数据: structure(list(Group.1 = structure(c(1L,2L,3L,1L,3L),.Label = c("Black or African American","White Alone","White Alone LR"),class = "factor"),Group.2 = structure(c(1L,.Label = c("bus","mixed","rai
我使用聚合(,FUN = sum)函数构造了以下数据:
structure(list(Group.1 = structure(c(1L,2L,3L,1L,3L),.Label = c("Black or African American","White Alone","White Alone LR"),class = "factor"),Group.2 = structure(c(1L,.Label = c("bus","mixed","rail"
),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",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))

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

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),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) +
plot(modesplit)

饼图的“馅饼”消失了:

我试过了:

>移除秤
>删除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,position="stack") +
  scale_fill_discrete(guide=guide_legend(title="Mode")) +
  coord_polar(theta="y") +
  geom_text(aes(y = pos_scaled,size =5) +
  facet_grid(. ~ Group.1,breaks = NULL)

plot(modesplit)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读