猿问

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

我正在尝试使用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进行调整是绝对的


芜湖不芜
浏览 952回答 3
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而言,此信息在饼图中会丢失。
随时随地看视频慕课网APP
我要回答