为了账号安全,请及时绑定邮箱和手机立即绑定

ggplot,构面,饼图:在饼图切片的中间放置文本

ggplot,构面,饼图:在饼图切片的中间放置文本

芜湖不芜 2019-10-11 10:59:48
我正在尝试使用ggplot生成多面的饼图,并遇到在每个切片的中间放置文本的问题:dat = read.table(text = "Channel Volume Cnt                         AGENT   high   8344                         AGENT medium   5448                         AGENT    low  23823                         KIOSK   high  19275                         KIOSK medium  13554                         KIOSK    low  38293", header=TRUE)vis = ggplot(data=dat, aes(x=factor(1), y=Cnt, fill=Volume)) +  geom_bar(stat="identity", position="fill") +  coord_polar(theta="y") +  facet_grid(Channel~.) +  geom_text(aes(x=factor(1), y=Cnt, label=Cnt, ymax=Cnt),             position=position_fill(width=1))输出: 在此处输入图片说明geom_text为了将数字标签放置在饼图切片的中间,应调整的哪些参数?相关的问题是饼图使其文本彼此重叠,但无法处理多面情况。更新:在上述问题中,按照保罗·海姆斯特拉的建议和方法,我将代码更改如下:---> pie_text = dat$Cnt/2 + c(0,cumsum(dat$Cnt)[-length(dat$Cnt)])     vis = ggplot(data=dat, aes(x=factor(1), y=Cnt, fill=Volume)) +     geom_bar(stat="identity", position="fill") +     coord_polar(theta="y") +     facet_grid(Channel~.) +     geom_text(aes(x=factor(1), --->               y=pie_text,                    label=Cnt, ymax=Cnt), position=position_fill(width=1))正如我所期望的那样,对文本coordiantes进行调整是绝对的
查看完整描述

3 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

要调整标签文本相对于坐标的位置,可以使用的vjust和hjust参数geom_text。这将同时确定所有标签的位置,因此可能不是您所需要的。


或者,您可以调整标签的坐标。data.frame在平均Cnt坐标(label_x[i] = Cnt[i+1] + Cnt[i])处定义一个新标签,以将标签放置在该特定饼图的中心。只是通过这个新data.frame来geom_text替换原来的data.frame。


此外,饼图还存在一些视觉上的解释缺陷。通常,我不会使用它们,尤其是在存在良好替代方案的地方,例如点图:


ggplot(dat, aes(x = Cnt, y = Volume)) + 

  geom_point() + 

  facet_wrap(~ Channel, ncol = 1)

例如,从该图中可以看出,Cnt对于Kiosk而言,其价格要高于对Agent而言,此信息在饼图中会丢失。


查看完整回答
反对 回复 2019-10-11
  • 3 回答
  • 0 关注
  • 951 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信