根据 R 中的样本大小缩放网格中的多个饼图

问题描述 投票:0回答:1

我想创建一个包含 3 个饼图的网格(我的真实数据很大,这里是一个示例),每个图表根据其样本大小进行缩放。例如,第 2 行、位置 b 的绘图应具有最小尺寸,而第 3 行、位置 c 的绘图应具有最大尺寸。这是一个类似的问题:使用 ggplot2 根据 R 中的大小缩放网格中的多个饼图

你能帮我吗?谢谢。

这是我的 df:

x <- data.frame(
  location = c("a", "b", "c"),
  samplesize = c(26, 3, 96),
  a1 = c(12, 2, 77),
  a2 = c(24, 1, 31),
  a3 = c(15, 2, 56)
)
r ggplot2 pie-chart
1个回答
0
投票

我可能会推出自己的饼图函数并用

geom_polygon
绘制它:

library(tidyverse)

make_pie <- function(x, y, size, groups, n, rownum) {
  angles <- c(0, 2*pi * cumsum(n)/sum(n))
  do.call("rbind", Map(function(a1, a2, g) {
    xvals <- c(0, sin(seq(a1, a2, len = 30)) * size, 0) + x
    yvals <- c(0, cos(seq(a1, a2, len = 30)) * size, 0) + y
    data.frame(x = xvals, y = yvals, group = g, rownum = rownum)
  }, head(angles, -1), tail(angles, -1), groups))
}

x %>%
  mutate(r = row_number()) %>%
  mutate(x = 1:3, y = 1) %>%
  rowwise() %>%
  group_map(~ with(.x, make_pie(x, y, sqrt(samplesize)/20, 
                                c("a1", "a2", "a3"),
                                c(a1, a2, a3), r))) %>%
  bind_rows() %>%
  ggplot(aes(x, y, fill = group, group = interaction(group, rownum))) +
  geom_polygon() +
  annotate("text", x = 1:3, y = 1.6, label = c("a", "b", "c"), size = 7) +
  coord_equal() +
  theme_void(base_size = 20)

© www.soinside.com 2019 - 2024. All rights reserved.