![](/img/trans.png)
[英]ggplot - How can I combine two scatter plots from different data.frames and use distinct colorset to identify each dataframe
[英]How can I overlay two dense scatter plots so that I can see the outlines of each in R or Matlab?
看這個例子
這是在matlab中創建的,通過獨立制作兩個散點圖,創建每個散點圖,然后使用imagesc將它們繪制到同一個圖中,然后最終將頂部圖像的alpha設置為0.5。
我想在不使用圖像的情況下在R或matlab中執行此操作,因為創建圖像不會保留軸刻度信息,也不能覆蓋網格(例如,在matlab中使用'grid on')。 理想情況下,我想在matlab中正確地做到這一點,但也會對R中的解決方案感到滿意。看起來它應該是可能的,但我不能為我的生活弄明白。
所以一般來說,我希望能夠設置整個繪圖對象的alpha(即matlab繪圖中的matlab繪圖句柄...)
謝謝,
本。
編輯:上例中的數據實際上是2D。 繪制的點來自計算機模擬。 每個點代表“振幅”(y軸)(特定於我正在運行的模擬的緊急屬性),針對“性能”(x軸)繪制。
編輯2:每個數據集中有1796400個點。
使用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()
這導致以下插圖:
您可以先將兩個數據集導出為位圖圖像,重新導入它們,添加透明度:
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字節單詞的序列: muddy <- "#888888FF"
。 前三對設置RGB顏色(00到FF); 最后一對設置透明度級別。
AFAIK,Matlab的最佳選擇是制作自己的繪圖功能。 遺憾的是,散點圖點尚未具有透明度屬性,因此您無法對其進行影響。 但是,如果您創建(比如說,最粗略地)一堆繪制許多小圓圈的循環,則可以輕松地為它們提供alpha值並獲得一組透明的數據點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.