【问题标题】:Is there an R function to normalize height in a pie chart?是否有 R 函数来标准化饼图中的高度?
【发布时间】:2022-01-05 19:03:46
【问题描述】:

我正在尝试比较来自 ggplot2 的两个饼图,但是当我尝试绘制它时,由于数据集的长度差异很大,它看起来非常小。

我希望饼图按一个类别划分,然后按另一个分组。

df %>% 
  count(category,group) %>% 
  ggplot(aes(x="", y=n, fill=factor(group))) +
  geom_bar(stat="identity", width=1)  +
  coord_polar("y", start=0) +
  facet_wrap(~category) 

我做了以下操作来标准化它们的高度。

Piechartdf <- df %>% 
  count(category,group) 

Piechart <- Piechart %>%
      mutate(proportion = case_when(
        Type=="category1" ~ n/sum(Piechart[which(Piechart$Type == "category1"), 3]),
        Type=="category2" ~ n/sum(Piechart[which(Piechart$Type == "category2"), 3])
      ))

那么在第一个中,我只是机会 n 的比例,有没有更简单的方法来实现这一点?

【问题讨论】:

  • 能否通过发布dput(df)的输出提供示例数据?
  • 您的方法很好 - 计算和绘制比例而不是计数,但是您的 dplyr 代码很笨重。如果您按照 r2evans 的建议分享一些数据,我们或许可以提供帮助。
  • 结构(列表(X = 36:51,类别 = c(“category2”,“category2”,“category2”,“category2”,“category2”,“category2”,“category2”, “category2”、“category2”、“category2”、“category2”、“category1”、“category1”、“category1”、“category1”、“category1”),组 = c(30L、40L、30L、30L、30L , 30L, 20L, 30L, 30L, 40L, 30L, 30L, 50L, 30L, 60L, 40L)), row.names = 36:51, class= "data.frame")

标签: r ggplot2 pie-chart normalize


【解决方案1】:

你可以试试

df %>% 
  count(category,group) %>%
  group_by(category) %>%
  mutate(n = n/sum(n)) %>%
  ggplot(aes(x="", y=n, fill=factor(group), group = category)) +
  geom_bar(stat="identity", width=1)+
  coord_polar("y", start=0)  +
  facet_wrap(~category) 

【讨论】:

    猜你喜欢
    • 2012-10-09
    • 2021-03-13
    • 2022-01-01
    • 2014-07-25
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多