如何解决更改饼图中文本相对于半径的角度
我有一个关于在饼图中放置文本的问题。下面有一个代码。
library(ggplot2)
pie_chart=function(vec){
if (class(vec)=='numeric'){vec<-as.character(vec)
vec<-print(paste('var',vec))
}
#creating data frame : variables and number of their occurrences
df<-data.frame(table(vec))
colnames(df)[1]<-'group'
#creating bar plot first
bp<- ggplot(df,aes(x="",y=Freq,fill=group))+
geom_bar(width = 1,stat = "identity")
blank_theme <- theme_minimal()+
theme(
axis.title.x = element_blank(),axis.title.y = element_blank(),panel.border = element_blank(),panel.grid=element_blank(),axis.ticks = element_blank(),plot.title=element_text(size=14,face="bold")
)
#adding polar coordinates to make a circle
pie <- bp + coord_polar("y",start=0)
pie + scale_fill_brewer("Characteristic") + blank_theme +
theme(axis.text.x=element_blank())+
geom_text(aes(y = rev(Freq)/2 + c(0,cumsum(rev(Freq))[-length(Freq)]),label = print(paste0(rev(Freq),'(',percent(rev(Freq)/(sum(Freq))),')'))),size=5)
}
pie_chart(c(rep(1,40),rep(2,30),rep(3,60),rep(4,50)))
如您所见,它看起来像上面。对于每一块馅饼,文本都是水平的。有什么办法可以改变它?让我们在行中间添加一个限制饼图的文本。即我想在下面的图片中像线条一样放置文本。
你知道如何做吗?
先谢谢!
解决方法
您需要为馅饼创建一个角度变量,就像位置变量一样,然后在geom_text中使用它来设置相对于圆中365度的角度。
例如如果我们将其添加到https://www.r-graph-gallery.com/piechart-ggplot2.html的示例中,则看起来像这样:
library(ggplot2)
library(dplyr)
# Create Data
data <- data.frame(
group=LETTERS[1:5],value=c(13,7,9,21,2)
)
# Compute the position of labels
data <-
data %>%
arrange(desc(group)) %>%
mutate(prop = value / sum(data$value) *100) %>%
mutate(ypos = cumsum(prop)- 0.5*prop) %>%
mutate(yang = 90-(ypos/100*365)) # Create an angle variable relative to the the text position
# Basic piechart
ggplot(data,aes(x="",y=prop,fill=group)) +
geom_bar(stat="identity",width=1,color="white") +
coord_polar("y",start=0) +
theme_void() +
theme(legend.position="none") +
geom_text(aes(y = ypos,label = group,angle = yang),color = "white",size=6) # add angle
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。