r - 使用 ggplot2 创建具有散点图平均值的网格和颜色单元格

标签 r data-visualization ggplot2 aggregation

给定一个包含 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。

谢谢你。

编辑:最小示例

最佳答案

使用 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");

enter image description here

然后得到不同的是有点困惑,但我们可以从我们已经创建的图中提取数据并将它们组合起来
#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")

enter image description here

关于r - 使用 ggplot2 创建具有散点图平均值的网格和颜色单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25457966/

相关文章:

r - ggplot2 的facet_grid 内部元素中具有多个重复值的不同重新排序

r - 在 ggplot2 的条形图中为分类变量添加阴影替代区域

read.table 原样

r - R中的聚类和热图

javascript - 是什么让网格线可见?

.net - 可视化 RDF 查询结果

r - 如何有效地为依赖 dplyr 的自定义函数使用不同的参数?

mysql - 如何安装和配置 RMySQL 以连接到远程 MySQL 数据库 (AWS RDS)?

r - 如何仅删除一些方面标签?

词树可视化的 Javascript 实现