我想在分面饼图上添加数据标签.
也许有人可以帮助我.
我的数据:
year <- c(1,2,1,2,1,2)
prod <- c(1,1,2,2,3,3)
quantity <- c(33,50,33,25,34,25)
df <- data.frame(year, prod, quantity)
rm(year, prod, quantity)
Run Code Online (Sandbox Code Playgroud)
码:
library(ggplot2)
# center's calculated by hand
centr2 <- c(16, 25, 49, 62.5, 81, 87.5)
ggplot(data=df, aes(x=factor(1), y=quantity, fill=factor(prod))) +
geom_bar(stat="identity") +
geom_text(aes(x= factor(1), y=centr2, label = df$quantity), size=10) +
facet_grid(facets = .~year, labeller = label_value) +
coord_polar(theta = "y")
Run Code Online (Sandbox Code Playgroud)
我的结果是:

如果我删除coord_polar(theta ="y"),我将得到以下图:

现在我很清楚,为什么我的数据标签不匹配.
但我不知道如何解决它.
我读到:
1.在饼图上放置标签
2. 在带有刻面密度的ggplot中添加文本
3. 饼图将其文本放在彼此的顶部
但没有找到答案.
我正在尝试使用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))
Run Code Online (Sandbox Code Playgroud)
输出:

geom_text应该调整哪些参数才能将数字标签放在饼图切片的中间?
相关问题是Pie plot将其文本放在彼此的顶部,但它不处理facet的情况.
更新:在上面的问题中遵循Paul Hiemstra的建议和方法我改变了代码如下:
---> 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), …Run Code Online (Sandbox Code Playgroud) 我有一个数据框,想要在一个特定列上创建一个饼图,表示此列中每个级别的百分比.
data <- data.frame(a=c("a1","a1","a2","a3","a1","a2","a3","a4","a2","a1","a5","a4","a3"),
b=1:13)
Run Code Online (Sandbox Code Playgroud)
换句话说,我想要一个饼图,表明a1,a2,......的出现百分比.
另外,我需要在图表上显示百分比.我怎样才能用ggplot2包完成这一切?
任何小小的帮助将不胜感激!