r - 在饼图上放置标签

标签 r ggplot2

我想将标签放在饼图上,而不是图例中。换句话说,我希望派对的名称出现在图表的中心而不是右边。我该怎么做?

示例 DF:

> data_party$party[1:20]
 [1] "Independents" "Independents" "Independents" "Independents" "Democrats"   
 [6] "Democrats"    "Democrats"    "Democrats"    "Independents" "Independents"
[11] "Democrats"    "Democrats"    "Democrats"    "Democrats"    "Democrats"   
[16] "Independents" "Democrats"    "Democrats"    "Independents" "Democrats" 

来自列的样本向量:

# pie graph for party
data_party <- subset(data, subset=!is.na(data$Q7))
data_party$party[data_party$Q7==1]<-"Democrats"
data_party$party[data_party$Q7==2]<-"Republicans"
data_party$party[data_party$Q7==3]<-"Independents"
data_party$party[data_party$Q7==4]<-"None"
pie <- ggplot(data_party, aes(x = "Party Affiliation", fill = factor(party))) + geom_text(aes(y = party, label=party)) + geom_bar(width = 1) + theme(panel.background = element_blank())
pie + coord_polar(theta = "y") + theme(legend.title=element_blank())+ theme(axis.title.x = element_blank()) + theme(axis.title.y = element_blank())

最佳答案

这是一种可能的解决方案,使用 gridExtra 包中的 grid.text 函数。

#Reproducible example
party = c("None","Republicans","Republicans","Independents","Democrats",
          "Democrats","Republicans","Republicans","Independents","Independents",
          "Democrats","Democrats","Republicans","Democrats","Democrats",
          "Independents","Democrats","Democrats","Republicans","None")

data_party = data.frame(party=party)

#Pie chart without labels
pie = ggplot(data_party, aes(x="", fill=factor(party))) + 
          geom_bar(width=1) +
          coord_polar(theta="y",start=0) +
          geom_text(aes(y="",label="")) +
          xlab("") + ylab("") +
          theme_bw() + 
          theme(legend.position = "none",
                panel.grid.major = element_line(color="grey60"),
                panel.border=element_blank())
pie

#Percentage of each category
Democrats = (sum(data_party$party=="Democrats")/length(data_party$party))*100
Democrats = paste("(",Democrats,"%)",sep="")

Republicans = (sum(data_party$party=="Republicans")/length(data_party$party))*100
Republicans = paste("(",Republicans,"%)",sep="")

Independents = (sum(data_party$party=="Independents")/length(data_party$party))*100
Independents = paste("(",Independents,"%)",sep="")

None = (sum(data_party$party=="None")/length(data_party$party))*100
None = paste("(",None,"%)",sep="")

#Add labels with % in pie chart
library(gridExtra)
grid.text(paste("Democrats"   ,Democrats   ,sep=" "), x=unit(0.62, "npc"), y=unit(0.66, "npc"), gp=gpar(fontsize=14, col="black"), rot = 00)
grid.text(paste("Republicans" ,Republicans ,sep=" "), x=unit(0.40, "npc"), y=unit(0.66, "npc"), gp=gpar(fontsize=14, col="black"), rot = 00)
grid.text(paste("Independents",Independents,sep=" "), x=unit(0.52, "npc"), y=unit(0.27, "npc"), gp=gpar(fontsize=14, col="black"), rot = 00)
grid.text(paste("None"        ,None        ,sep=" "), x=unit(0.35, "npc"), y=unit(0.38, "npc"), gp=gpar(fontsize=14, col="black"), rot = 36)

enter image description here

关于r - 在饼图上放置标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20443467/

相关文章:

r - 将 R 中 type=n 的绘图复制到 PDF 不会复制绘图点,仅在输出 pdf 中显示其线条

r - Bookdown:导出到 Word 文档(文件 2[[格式]] 中的错误:尝试在 get1index 中选择少于一个元素)

r - 将stat_smooth约束到特定范围

r - 计算两个弯曲边界之间的观测值数量

r - FALSE 与 F : Error mapply's SIMPLIFY argument: in SIMPLIFY=F

r - 如何在分配类似于 r 中的括号 (x<-27) 技巧后在新行上打印变量

RMarkdown : how to get english error messages on a localised system

r - 转换 H :M:S character variable to numeric/continuous scale (R)

r - 使用 ggplot2 的 geom_bar() 查询 - R

r - scale_x_discrete 5 个刻度,带有 3 个标签