我正在尝试使用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而言,此信息在饼图中会丢失。
- 3 回答
- 0 关注
- 951 浏览
添加回答
举报
0/150
提交
取消