如何叠加两个密集的散点图,以便我可以在R或Matlab中看到每个散点图的轮廓?

Ben*_*n J 13 matlab plot r ggplot2 plyr

看这个例子重叠散点图的示例

这是在matlab中创建的,通过独立制作两个散点图,创建每个散点图,然后使用imagesc将它们绘制到同一个图中,然后最终将顶部图像的alpha设置为0.5.

我想在不使用图像的情况下在R或matlab中执行此操作,因为创建图像不会保留轴刻度信息,也不能覆盖网格(例如,在matlab中使用'grid on').理想情况下,我想在matlab中正确地做到这一点,但也会对R中的解决方案感到满意.看起来它应该是可能的,但我不能为我的生活弄明白.

所以一般来说,我希望能够设置整个绘图对象的alpha(即matlab绘图中的matlab绘图句柄...)

谢谢,

本.

编辑:上例中的数据实际上是2D.绘制的点来自计算机模拟.每个点代表"振幅"(y轴)(特定于我正在运行的模拟的紧急属性),针对"性能"(x轴)绘制.

编辑2:每个数据集中有1796400个点.

Pau*_*tra 11

使用ggplot2你可以将两个加在一起,geom_point并使用alpha参数使它们透明.ggplot2als增加了透明度,我认为这就是你想要的.这应该工作,虽然我还没有运行.

dat = data.frame(x = runif(1000), y = runif(1000), cat = rep(c("A","B"), each = 500))
ggplot(aes(x = x, y = y, color = cat), data = dat) + geom_point(alpha = 0.3)
Run Code Online (Sandbox Code Playgroud)

ggplot2太棒了!

这是计算和绘制凸包的示例:

library(automap)
library(ggplot2)
library(plyr)
loadMeuse()
theme_set(theme_bw())

meuse = as.data.frame(meuse)
chull_per_soil = ddply(meuse, .(soil), 
           function(sub) sub[chull(sub$x, sub$y),c("x","y")])

ggplot(aes(x = x, y = y), data = meuse) +
  geom_point(aes(size = log(zinc), color = ffreq)) +
  geom_polygon(aes(color = soil), data = chull_per_soil, fill = NA) +
  coord_equal()
Run Code Online (Sandbox Code Playgroud)

这导致以下插图:

在此输入图像描述

  • 您可以对数据进行二次采样.或者在tye点周围绘制一个凸包,并使用透明的`geom_polygon` (2认同)

bap*_*ste 5

您可以先将两个数据集导出为位图图像,重新导入它们,添加透明度:

覆盖

library(grid)

N <- 1e7 # Warning: slow
d <- data.frame(x1=rnorm(N),
                x2=rnorm(N, 0.8, 0.9),
                y=rnorm(N, 0.8, 0.2),
                z=rnorm(N, 0.2, 0.4))

v <- with(d, dataViewport(c(x1,x2),c(y, z)))

png("layer1.png", bg="transparent")
with(d, grid.points(x1,y, vp=v,default="native",pch=".",gp=gpar(col="blue")))
dev.off()
png("layer2.png", bg="transparent")
with(d, grid.points(x2,z, vp=v,default="native",pch=".",gp=gpar(col="red")))
dev.off()

library(png)
i1 <- readPNG("layer1.png", native=FALSE)
i2 <- readPNG("layer2.png", native=FALSE)

ghostize <- function(r, alpha=0.5)
  matrix(adjustcolor(rgb(r[,,1],r[,,2],r[,,3],r[,,4]), alpha.f=alpha), nrow=dim(r)[1])

grid.newpage()
grid.rect(gp=gpar(fill="white"))
grid.raster(ghostize(i1))
grid.raster(ghostize(i2))
Run Code Online (Sandbox Code Playgroud)

例如,你可以将这些添加为图层ggplot2.