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)  

修改后的图形已经正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值