【问题标题】:Create grid and color cells with average values of scatterplot using ggplot2使用 ggplot2 创建具有散点图平均值的网格和颜色单元
【发布时间】:2014-10-16 22:53:54
【问题描述】:

给定一个具有 N 个点的数值数据集 {(x_i, y_i, z_i)},可以通过为每个 i=1,...,N 绘制一个点 P_i=(x_i,y_i) 并为每个点着色来创建散点图点的强度取决于 z_i 的值。

library(ggplot2)
N = 1000;
dfA = data.frame(runif(N), runif(N), runif(N))
dfB = data.frame(runif(N), runif(N), runif(N))
names(dfA) = c("x", "y", "z")
names(dfB) = c("x", "y", "z")

PlotA <- ggplot(data = dfA, aes(x = x, y = y)) + geom_point(aes(colour = z));
PlotB <- ggplot(data = dfB, aes(x = x, y = y)) + geom_point(aes(colour = z));

假设我已经创建了这些散点图。我想对每个数据集做的是用网格划分平面(矩形、六边形、三角形……没关系),并用落在其中的所有点的平均强度为网格的每个单元格着色细胞。

另外,假设我为两个不同的数据集 dfA 和 dfB 创建了两个这样的图 PlotA 和 PlotB(如上)。设 c_i^k 为图 k 的第 i 个单元格。我想创建第三个图,使得每个 i 的 c_i^3 = c_i^1 * c_i^2。

谢谢。

编辑:最小示例

【问题讨论】:

  • 如果您提供示例数据集,这将更容易回答。这样,我们就可以编写代码并测试它是否适用于(理论上)与您实际使用的输入相似的输入。有关包含示例数据的提示,请参阅 how to create a reproducible example
  • 为什么我的问题被否决了?

标签: r data-visualization ggplot2 aggregation


【解决方案1】:

使用stat_summary2d 函数来划分平面并计算矩形的摘要非常简单。首先,我将创建明确的中断,而不是让ggplot 选择它们,这样它们对于两个情节将完全相同

bb<-seq(0,1,length.out=10+1)
breaks<-list(x=bb, y=bb)

p1 <- ggplot(data = dfA, aes(x = x, y = y, z=z)) + 
    stat_summary2d(fun=mean, breaks=breaks) + ggtitle("A");
p2 <- ggplot(data = dfB, aes(x = x, y = y, z=z)) + 
    stat_summary2d(fun=mean, breaks=breaks) + ggtitle("B");

然后得到不同有点麻烦,但我们可以从我们已经创建的图中提取数据并将它们组合起来

#get data
d1 <- ggplot_build(p1)$data[[1]][, 2:4]
d2 <- ggplot_build(p2)$data[[1]][, 2:4]
mm <- merge(d1, d2, by=c("xbin","ybin"))

#turn factor back into numeric values
mids <- diff(bb)/2+bb[-length(bb)]

#plot difference
ggplot(mm, aes(x=mids[xbin], y=mids[ybin], fill=value.x-value.y)) + 
   geom_tile() + scale_fill_gradient2(name="diff") + labs(x="x",y="y")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 2019-05-04
    • 2014-07-01
    • 1970-01-01
    • 2021-11-01
    • 2021-10-29
    • 2021-09-05
    相关资源
    最近更新 更多