首页 > 解决方案 > 将更改的几何从对象传递到其他 ggplot

问题描述

我先做一个情节

   df <- data.frame(x = c(1:40, rep(1:20, 3), 15:40))
    p <- ggplot(df, aes(x=x, y = x)) +
      stat_density2d(aes(fill='red',alpha=..level..),geom='polygon', show.legend = F)

然后我想更改 geom_density 值并在另一个图中使用它们。

# build plot 
q <- ggplot_build(p)

# Change density
dens <- q$data[[1]]     
dens$y <- dens$y - dens$x 

使用改变的密度构建另一个图,如下所示:

  # Built another plot
    ggplot(df, aes(x=x, y =1)) + 
      geom_point(alpha = 0.3) +
      geom_density2d(dens)

这不起作用但是有没有办法做到这一点?


编辑:当有多个组时这样做

df <- data.frame(x = c(1:40, rep(1:20, 3), 15:40), group = c(rep('A',40), rep('B',60), rep('C',26)))
p <- ggplot(df, aes(x=x, y = x)) +
  stat_density2d(aes(fill=group,alpha=..level..),geom='polygon', show.legend = F)

q <- ggplot_build(p)
dens <- q$data[[1]]     
dens$y <- dens$y - dens$x

ggplot(df, aes(x=x, y =1)) + 
  geom_point(aes(col = group), alpha = 0.3) +
  geom_polygon(data = dens, aes(x, y, fill = fill, group = piece, alpha = alpha)) +
  scale_alpha_identity() +
  guides(fill = F, alpha = F)

应用于我自己的数据集时的结果 虽然这正是我正在寻找的填充颜色似乎与初始颜色不对应(链接到 A、B 和 C): 在此处输入图像描述

标签: rggplot2density-plotgrob

解决方案


像这样?可以绘制由 绘制的形状的变换geom_density。但这与操纵潜在密度并不完全相同......

ggplot(df, aes(x=x, y =1)) + 
  geom_point(alpha = 0.3) +
  geom_polygon(data = dens, aes(x, y, fill = fill, group = piece, alpha = alpha)) +
  scale_alpha_identity() +
  guides(fill = F, alpha = F)

在此处输入图像描述


编辑 - OP 现在有多个组。我们可以使用下面的代码绘制它们,这会产生一个实用性可疑的艺术图。它会按照您的建议进行,但如果您正在寻找有代表性的输出,我建议转换基础数据并对其进行总结会更有成效。

ggplot(df, aes(x=x, y =1)) + 
  geom_point(aes(col = group), alpha = 0.3) +
  geom_polygon(data = dens, aes(x, y, fill = group, group = piece, alpha = alpha)) +
  scale_alpha_identity() +
  guides(fill = F, alpha = F) +
  theme_minimal()

在此处输入图像描述


推荐阅读