Визуализировать 2-переменную функцию вероятности массы в R - PullRequest
6 голосов
/ 05 апреля 2011

У меня есть матрица в 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-визуализациюиз этих данных в виде квадрата, разделенного на 5x5 меньших квадратов, где цвет отдельного квадрата пропорционален записи в матрице.(В случае выше, это было бы самым темным по диагонали).Есть ли простой способ создать этот тип изображения?

Ответы [ 3 ]

4 голосов
/ 05 апреля 2011

Попробуйте это:

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))

enter image description here

3 голосов
/ 05 апреля 2011

Можно использовать функцию 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)))

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

3 голосов
/ 05 апреля 2011

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...