R-ggplot冒泡图按照组

时间:2017-08-09 18:13:10

标签: r ggplot2

我正在尝试制作一个气泡图,其中每个xy坐标都有多个z值。我希望geom_point的大小是每个xy坐标/交互的平均z值 - 我的预期输出将是这样的:

enter image description here

我尝试通过x和y值的交互进行分组,但无法获得ggplot来获取该组的均值。相反,我得到整个数据集的平均值或在同一个xy位置绘制多个点,每个点都有自己的大小由z值设置。以下是我尝试前者的方法:

library(ggplot2)

z <- seq(1,20, length.out = 18)
xy <- expand.grid(c(1,2,3),c(1,2,3))
xyz <- data.frame(xy, z)
names(xyz) <- c("x", "y", "z")

ggplot(xyz, aes(x, y, group = interaction(x,y)))+
  geom_point(size = z, position = position_jitter(width = 0.2, height = 0))

这给出了这个图(用抖动显示多个点被绘制):

enter image description here

那么是否可以按xy位置分组并按每个位置的平均值设置大小?当然,如果有必要,我可以先找到平均值,但我想知道ggplot本身是否有办法。

提前致谢,如果我需要澄清任何内容,请告诉我。

2 个答案:

答案 0 :(得分:2)

这会让你到达那里。虽然我宁愿首先转动/汇总数据,然后ggplot汇总的df。

 ggplot(data = (xyz %>% group_by(x, y) %>% summarise(z.mean = mean(z))),
         aes(x, y, size = z.mean)) + 
 geom_point(position = position_jitter(width = 0.2, height = 0))

enter image description here

答案 1 :(得分:0)

感谢@Gregor指导我stat_bin_2d让我找到最终为我工作的解决方案:

library(ggplot2)

z <- runif(81, min = 4, max = 10)
xy <- expand.grid(c(1,2,3),c(1,2,3))
xyz <- data.frame(xy, z)
names(xyz) <- c("x", "y", "z")

ggplot(xyz, aes(x, y, z = z), col = "black")+
  stat_summary_2d(aes(size = ..value..), geom = "point")+
  scale_size(range = c(4, 15))+
  guides(fill = FALSE)

输出的内容如下:

enter image description here

虽然这在技术上做到了我想要的,正如格雷戈尔和尼古拉斯指出的那样 - 这很难成为这样做的正确方法。