请参阅此示例
这是在matlab中创建的,它通过独立制作两个散点图,创建每个散点图,然后使用imagesc将它们绘制到同一个图中,然后最终将顶部图像的alpha设置为0.5。
我想在不使用图像的情况下在R或matlab中执行此操作,因为创建图像不会保留轴刻度信息,也不能覆盖网格(例如,在matlab中使用'grid on')。理想情况下,我想在matlab中正确地做到这一点,但也会对R中的解决方案感到满意。看起来它应该是可能的,但我不能为我的生活弄明白。
所以一般来说,我希望能够设置整个绘图对象的alpha值(即matlab用法中的matlab绘图句柄...)
谢谢,
本。
编辑:上例中的数据实际上是2D。绘制的点来自计算机模拟。每个点代表“振幅”(y轴)(特定于我正在运行的模拟的紧急属性),针对“性能”(x轴)绘制。
编辑2:每个数据集中有1796400个点。
答案 0 :(得分:11)
使用ggplot2
,您可以将两个geom_point
加在一起,并使用alpha
参数使其透明。 ggplot2
als增加了透明度,我认为这就是你想要的。这应该有用,虽然我没有运行它。
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)
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()
导致以下插图:
答案 1 :(得分: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))
您可以将这些作为图层添加到ggplot2
。
答案 2 :(得分:0)
使用颜色描述的透明度功能。您可以将颜色定义为四个2字节单词的序列:muddy <- "#888888FF"
。前三对设置RGB颜色(00到FF);最后一对设置透明度级别。
答案 3 :(得分:0)
AFAIK,Matlab的最佳选择就是制作自己的情节功能。遗憾的是,散点图点尚未具有透明度属性,因此您无法对其进行影响。但是,如果你创造了一些粗略地创建了许多小圆圈的循环,那么你可以很容易地给它们一个alpha值并获得一组透明的数据点。