我正在尝试制作一个气泡图,其中每个xy坐标都有多个z值。我希望geom_point
的大小是每个xy坐标/交互的平均z值 - 我的预期输出将是这样的:
我尝试通过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))
这给出了这个图(用抖动显示多个点被绘制):
那么是否可以按xy位置分组并按每个位置的平均值设置大小?当然,如果有必要,我可以先找到平均值,但我想知道ggplot本身是否有办法。
提前致谢,如果我需要澄清任何内容,请告诉我。
答案 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))
答案 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)
输出的内容如下:
虽然这在技术上做到了我想要的,正如格雷戈尔和尼古拉斯指出的那样 - 这很难成为这样做的正确方法。