在饼图上放置标签 [英] Place labels on Pie Chart

查看:132
本文介绍了在饼图上放置标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将我的标签放在饼图上,而不是放在图例中。换句话说,我希望派对的名字以图表为中心,而不是在右边。



样本DF:

 > data_party $ party [1:20] 
[1]独立者独立者独立者独立者民主人士
[6]民主人士民主人士民主人士独立人士民主人士民主人士民主人士民主人士民主人士
[16]独立人士民主人士民主人士独立人士民主人士

来自列的样本向量:

 <$ (数据,子集=!is.na(数据$ Q7))
data_party $ party [data_party $ Q7 == 1]< c $ c>#派对图的派对
data_party< - 民主人士
data_party $ party [data_party $ Q7 == 2]< - 共和党人
data_party $ party [data_party $ Q7 == 3]< - 独立人士
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.ti tle = element_blank())+ theme(axis.title.x = element_blank())+ theme(axis.title.y = element_blank())


解决方案

这是一个可能的解决方案,它使用中的 grid.text c> gridExtra 包。

  #Reproducible示例
party = c(None ,共和党人,共和党人,独立党派,民主党人,
民主党人,共和党人,共和党人,独立党派,独立党派,
民主党人民主党人,民主党人,民主党人,
独立党派,民主党人,民主党人,共和党人,无)

data_party = data .frame(party = party)

#没有标签的图表
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

#每个类别的百分比
Democrats =(总和(data_party $ party ==Democrats)/ length(data_party $ party))* 100
Democrats = paste((,Democrats ,%),sep =)

共和党人=(总和(数据党派对$ party ==共和党人)/长度(数据派对$派对))* 100
共和党人= ((,共和党人,%),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 $ )* 100
None = paste((,None,%),sep =)

在饼图中添加带有%的标签
库(gridExtra)
grid.text(paste(Democrats,Democrats,sep =),x =单位(0.62,npc),y =单位(0.66,npc),gp = gpar (fontsize = 14,col =black),rot = 00)
grid.text(paste(Republica (0.40,npc),y =单位(0.66,npc),gp = gpar(字体大小= 14,col =黑色),rot = 00)
grid.text(paste(Independents,Independents,sep =),x = unit(0.52,npc),y = unit(0.27,npc),gp = gpar (paste(None,None,sep =),x = unit(0.35,npc),y =单位(0.38,npc),gp = gpar(fontsize = 14,col =black),rot = 36)


I would like to place my labels on the piechart, not in the legend. In other words, I would like the name of the party to appear centered on the graph rather than to the right. How would I do this?

Sample 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" 

Sample vector from column:

# 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())

解决方案

Here is one possible solution using the grid.text function from gridExtra package.

#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)

这篇关于在饼图上放置标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆