Подтвердить что ты не робот

Как я могу наложить два плотных графика рассеяния, чтобы я мог видеть очертания каждого в R или Matlab?

См. этот пример Example of overlaid scatter plots

Это было создано в Matlab, сделав две диаграммы разброса независимо, создавая изображения каждого, затем используя imagesc, чтобы нарисовать их на одну фигуру, а затем, наконец, установив альфа верхнего изображения на 0,5.

Я хотел бы сделать это в R или Matlab без использования изображений, так как создание изображения не сохраняет информацию о масштабах оси, и я не могу наложить сетку (например, используя "сетка включен" в matlab). В идеале я хотел бы сделать это правильно в Matlab, но также был бы доволен решением в R. Кажется, что это должно быть возможно, но я не могу, чтобы жизнь меня поняла.

Как правило, я хотел бы иметь возможность установить альфу всего объекта, построенного по графику (т.е. дескриптора матлаба в языке Matlab...)

Спасибо,

Бен.

EDIT: данные в приведенном выше примере фактически являются 2D. Настроенные точки взяты из компьютерного моделирования. Каждая точка представляет собой "амплитуду" (ось y) (возникающее свойство, специфичное для моделирования, которое я запускаю), построенное по отношению к "производительности" (по оси x).

EDIT 2: в каждом наборе данных есть 1796400 точек.

4b9b3361

Ответ 1

Используя 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()

что приводит к следующей иллюстрации:

enter image description here

Ответ 2

Вы можете сначала экспортировать два набора данных в виде растровых изображений, повторно импортировать их, добавить прозрачность:

overlay

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.

Ответ 3

Используйте возможности прозрачности описаний цветов. Вы можете определить цвет как последовательность из четырех двухбайтовых слов: muddy <- "#888888FF". Первые три пары устанавливают цвета RGB (от 00 до FF); последняя пара устанавливает уровень прозрачности.

Ответ 4

AFAIK, ваш лучший вариант с Matlab - просто создать свою собственную функцию построения сюжета. К сожалению, у участка разброса еще нет атрибута прозрачности, поэтому вы не можете повлиять на него. Однако, если вы создаете, скажем, наиболее грубо, кучу циклов, которые рисуют много крошечных кругов, вы можете легко дать им альфа-значение и получить прозрачный набор точек данных.