【问题标题】:ggplot2 : create a faceted pie chart with an empty space after the first columnggplot2:创建一个多面饼图,在第一列之后有一个空白区域
【发布时间】:2020-06-03 13:22:05
【问题描述】:

目前我正在使用 ggplot2 使用以下代码创建这样的图表

ggplot(data.df[sel,], aes(x=1, y = mean_ponderation_norm, fill = Usage)) +
  geom_bar(stat="identity",color='black') +
  coord_polar(theta='y')+
  scale_fill_brewer(type="qual", palette = 2, direction = 1, name="")+
  facet_grid(zone.x~Type_service)+
  theme(#panel.grid = element_blank(), ## remove guide lines
    #axis.text.x = element_blank(),
    axis.text.y = element_blank(),
    axis.ticks=element_blank(),  # the axis ticks
    axis.title=element_blank()  # the axis labels
  )+
  scale_y_continuous(limits = c(0, 100))

但我希望第二列中的切片从它们在第一列中停止的位置开始。得到这样的东西

【问题讨论】:

    标签: r ggplot2 pie-chart


    【解决方案1】:

    在使用极坐标绘图时,考虑所需效果在笛卡尔坐标中的外观总是很有用的。您正在寻找的东西在笛卡尔坐标中看起来像这样:

    这种特殊效果几乎可以通过堆叠条形图和一些技巧来实现,前提是您只有图片所暗示的两个方面。但是,您的代码表明您有 4 个或更多,所以这不起作用。

    您可以使用geom_rect 来实现您正在寻找的结果,而不是使用堆叠条。您没有提供任何数据或最小的可重现示例有点令人失望,因为您需要转换自己的数据才能使用geom_rect。我必须创建自己的数据来展示如何做到这一点,这意味着您必须弄清楚如何转换自己的数据来做同样的事情。

    无论如何,这是我要使用的数据。在您的数据中,mean_ponderation_norm 包含 y 值。我要打电话给我的all_widths。您需要cumsum 并将其标准化。您还需要在位置 1 创建一个带有零的滞后副本,并将其添加到您的数据框中:

    set.seed(69)
    all_widths <- runif(10, 5, 10)
    all_widths <- 60 * cumsum(all_widths)/sum(all_widths)
    
    df <- data.frame(facet_var = rep(LETTERS[1:2], each = 5),
                     factor_var = rep(LETTERS[1:10]),
                     start_var = c(0, all_widths[-length(all_widths)]),
                     end_var  = all_widths)
    

    现在你的情节是这样的:

    ggplot(df, aes(xmin = 0, xmax = 1, ymin = start_var, 
                   ymax = end_var, fill = factor_var)) +
      geom_rect(color = 'black', size = 1) +
      coord_polar(theta = 'y') +
      facet_grid(. ~ facet_var) +
      theme(axis.text.y = element_blank(),
            axis.ticks = element_blank(), 
            axis.title = element_blank()) +
      scale_y_continuous(limits = c(0, 100)) +
      guides(fill = "none")
    

    【讨论】:

    • 谢谢!它适用于一个方面,但有 2 个 facet_variable ? df &lt;- data.frame(facet_var1 = rep(LETTERS[1:2], each = 5), facet_var2 = rep(LETTERS[3:4], each = 5), factor_var = rep(LETTERS[1:10]), start_var = c(0, all_widths[-length(all_widths)]), end_var = all_widths)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多