簡體   English   中英

如何疊加兩個密集的散點圖,以便我可以在R或Matlab中看到每個散點圖的輪廓?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM