微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 ggplot2 中订购饼图切片

如何解决在 ggplot2 中订购饼图切片

我想订购我的饼图标签和切片。我在下面的尝试能够对标签进行排序,但切片仍然是无序的。感谢您的帮助。

enter image description here

data = structure(list(Stage = c("Collecting Applications","Interview Stages","Offer Accepted","Offer in Progress","To Open"),N = c(17L,30L,8L,2L,65L),Prop = c(14,25,7,2,53),Label = c("14%","25%","7%","2%","53%")),row.names = c(NA,-5L),class = c("tbl_df","tbl","data.frame"))

data$Stage = factor(data$Stage,ordered = TRUE,levels = c("To Open","Collecting Applications","Offer Accepted"))

library(dplyr)
data = data %>% 
    mutate(end = 2 * pi * cumsum(N)/sum(N),start = lag(end,default = 0),middle = 0.5 * (start + end),hjust = ifelse(middle > pi,1,0),vjust = ifelse(middle < pi/2 | middle > 3 * pi/2,1))
data = data[order(data$Stage),]
  
  
library(ggforce)
library(ggplot2)

ggplot(data) + 
    geom_arc_bar(aes(x0 = 0,y0 = 0,r0 = 0,r = 1,start = start,end = end,fill = Stage)) +
    geom_text(aes(x = 1.05 * sin(middle),y = 1.05 * cos(middle),label = Label,hjust = hjust,vjust = vjust)) +
    coord_fixed() +
    scale_x_continuous(limits = c(-1.5,1.4),# Adjust so labels are not cut off
                       name = "",breaks = NULL,labels = NULL) +
    scale_y_continuous(limits = c(-1.2,1.2),labels = NULL) +
    theme_void() +
    labs(title = paste0("Progress for ",sum(data$N)," Positions"),fill = NULL) +
    scale_fill_brewer(palette = "Blues")

解决方法

一个简单的修复,订单数据框行需要在 hjust 和 vjust 突变之前。虽然不完全确定其背后的推理。如果有人知道,将不胜感激。谢谢!

library(dplyr)
data$Stage = factor(data$Stage,ordered = TRUE,levels = c("To Open","Collecting Applications","Interview Stages","Offer in Progress","Offer Accepted"))
data = data[order(data$Stage),]
data = data %>% 
    mutate(end = 2 * pi * cumsum(N)/sum(N),start = lag(end,default = 0),middle = 0.5 * (start + end),hjust = ifelse(middle > pi,1,0),vjust = ifelse(middle < pi/2 | middle > 3 * pi/2,1))
  
  
  
library(ggforce)
library(ggplot2)
  
ggplot(data) + 
    geom_arc_bar(aes(x0 = 0,y0 = 0,r0 = 0,r = 1,start = start,end = end,fill = Stage)) +
    geom_text(aes(x = 1.05 * sin(middle),y = 1.05 * cos(middle),label = Label,hjust = hjust,vjust = vjust)) +
    coord_fixed() +
    scale_x_continuous(limits = c(-1.5,1.4),# Adjust so labels are not cut off
                       name = "",breaks = NULL,labels = NULL) +
    scale_y_continuous(limits = c(-1.2,1.2),labels = NULL) +
    theme_void() +
    labs(title = paste0("Progress for ",sum(data$N)," Positions"),fill = NULL) +
    scale_fill_brewer(palette = "Blues")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?