Визуализировать 2-переменную совместную вероятностную массовую функцию в R

У меня есть матрица в R, которая представляет совместную функцию массы вероятности (pmf) двух переменных, например:

> matrix(c(.13, .00004, 0, 0, 0, .04, .13, .008, 0, 0, .01, .007, .16, .02, .0004, .004, .025, .070, .14, .01, .001, .007, .028, .028, .12), nrow=5)
 [,1] [,2] [,3] [,4] [,5]
[1,] 0.13000 0.040 0.0100 0.004 0.001
[2,] 0.00004 0.130 0.0070 0.025 0.007
[3,] 0.00000 0.008 0.1600 0.070 0.028
[4,] 0.00000 0.000 0.0200 0.140 0.028
[5,] 0.00000 0.000 0.0004 0.010 0.120

Я хотел бы создать 2D-визуализацию этих данных как квадрат, разделенный на 5 × 5 меньших квадратов, где цвет отдельного квадрата пропорционален входу в матрице. (В приведенном выше случае он будет самым темным по диагонали). Есть ли простой способ создания этого типа изображения?

3 ответа

ggplot может справиться с этим довольно легко. Я знаю два простых метода для этого:

library(ggplot2)
dat <- matrix(c(.13, .00004, 0, 0, 0, .04, .13, .008, 0, 0, .01, .007, .16, .02, .0004, .004, .025, .070, .14, .01, .001, .007, .028, .028, .12), nrow=5)
ggfluctuation(as.table(dat), type = "colour") +
 scale_fill_gradient(low = "white", high = "blue")
#Or with geom_tile
dat.m <- melt(dat)
ggplot(dat.m, aes(X1, X2, fill = value)) + 
 geom_tile(colour = "grey") + scale_fill_gradient(low = "white", high = "blue")

Для полноты здесь решетчатое решение (также легко):

library(lattice)
levelplot(dat)


Попробуйте следующее:

library(lattice)
#Build the data
x <- matrix(c(.13, .00004, 0, 0, 0, .04, .13, .008, 0, 0, .01, .007, .16, .02, .0004, .004, .025, .070, .14, .01, .001, .007, .028, .028, .12), nrow=5)
xmin <- min(x)
xmax <- max(x)
#Build the plot
pal <- colorRampPalette(c("lightblue", "blue"), space = "rgb")
levelplot(x, main="5 X 5 Levelplot", xlab="", ylab="", col.regions=pal(120), cuts=100, at=seq(xmin, xmax, (xmax-xmin)/20))


Можно использовать функцию image():

mat <- matrix(c(.13, .00004, 0, 0, 0, 
 .04, .13, .008, 0, 0,
 .01, .007, .16, .02, .0004,
 .004, .025, .070, .14, .01,
 .001, .007, .028, .028, .12), nrow=5)
image(mat, col = rev(heat.colors(12)))

но вам нужно придумать правильную цветовую схему для заполнения каждого класса /bin. Здесь я просто изменяю значение по умолчанию, чтобы получить более темные цвета для высоких значений. Но есть лучшие способы.

licensed under cc by-sa 3.0 with attribution.