ggplot2画饼图的问题

某天突然遇到要用ggplot2画饼图,画的时候发现图形有问题。数据集是这样的:

dt = data.frame(A = c(10, 4, 3, 2, 1), B = c('A','B','C','D','E'))

效果是这样的:

很明显,饼图的坐标和图形的方向是相反的,这是因为标签坐标计算反了方向。

原来的生成图形代码如下:

library(ggplot2)
dt = data.frame(A = c(10, 4, 3, 2, 1), B = c('A','B','C','D','E'))
# 文本相对于y周的位置
txt_of_y <- 0.8

dt = dt[order(dt$A, decreasing = TRUE),]
myLabel = as.vector(dt$B)
myLabel = paste(myLabel, "(", round(dt$A / sum(dt$A) * 100, 2), "%)", sep = "")   
p = ggplot(dt, aes(x = "", y = A, fill = B)) +
    geom_bar(stat = "identity", width = 1) +    
    coord_polar(theta = "y",start = 0, direction = -1) + 
    labs(x = "", y = "", title = "") + 
    theme(axis.ticks = element_blank()) + 
    theme(legend.title = element_blank(), legend.position = "none") + 
    scale_fill_discrete(breaks = dt$B, labels = myLabel) + 
    theme(axis.text.x = element_blank()) + 
    ## 在图中加上百分比:x 调节标签到圆心的距离, y 调节标签的左右位置
    geom_text(aes(y = c(0,cumsum(A)[-length(A)])+A/2,
                  x = 1/txt_of_y, label = myLabel), size = 3)  
p

需要修改geom_text()中的参数,反转坐标轴即对应的标签位置,如下实现:

geom_text(aes(y = rev(c(0,cumsum(rev(A))[-length(A)])+rev(A/2)),
                  x = 1/txt_of_y, label = myLabel), size = 3)  

修改后的图形已经正常。

猜你喜欢

转载自blog.csdn.net/godzla/article/details/82192326