2013-11-21 3 views
1

Я пытаюсь использовать ggplot, чтобы создать псевдо-boxplot с помощью цвета/прозрачности, но немного борюсь. Идея заключается в том, что для любой точки на оси x, чем больше число раз имеет значение y, тем темнее будет (x, y) точка. Чтобы добавить к усложнению, у меня нет счета для каждого (x, y), но вместо этого у меня есть счет для (x , ymin:ymax), что означает, что этот счетчик выполняется для всех точек между (x, ymin) и (x, ymax)Color Code Boxplot

Searching, кажется, немного сложнее, и я "м не удалось раскопать все, что я могу использовать. ближайший я мог бы получить сам был ниже, однако это занимает очень много времени для больших наборов данных.

library(ggplot2) 
set.seed(1) 
(d <- data.frame(cbind(x = sample(1:3, 10, replace = TRUE), y = sample(3:8, 10, replace = TRUE)), fac = sample(1:3, 10, replace = TRUE))) 

p1 <- ggplot() 

for (i in seq(nrow(d))) 
{ 
    p1 <- p1 + geom_rect(
    data=d[i,], 
    aes(
     xmin = fac - .4, 
     xmax = fac + .4, 
     ymin = x, 
     ymax = y), 
    alpha = .25 
) 

} 

enter image description here

Какие-либо предложения? Я бы предпочел решение ggplot. Thanks

Обновление от 23 ноября 13, С помощью Троя я добрался здесь. Единственные проблемы теперь в том, что легенда находится между значениями t для каждого прямоугольника, тогда как она должна варьироваться от кумулятивного t по x, y.

library(ggplot2) 
set.seed(1) 
d <- data.frame(cbind(x = sample(1:3, 6, replace = TRUE), 
         ymin = sample(3:8, 6, replace = TRUE), 
         ymax = sample(3:8, 6, replace = TRUE), 
         t = sample(3:8, 6, replace = TRUE)/10 
        )) 

ggplot(data=d) + 
    geom_rect(aes(xmin=x-0.4,xmax=x+0.4,ymin=ymin,ymax=ymax,alpha=t),fill="red") 
+0

Может добавить ковер участок к краям участка? http://stackoverflow.com/questions/11546256/two-way-density-plot-combined-with-one-way-density-plot-with-selected-regions-in – amzu

ответ

2

ggplot будет поддерживать векторы с использованием geom_rect

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

library(ggplot2) 
set.seed(1) 
(d <- data.frame(cbind(x = sample(1:3, 10, replace = TRUE), y = sample(3:8, 10, replace = TRUE)), fac = sample(1:3, 10, replace = TRUE))) 
ggplot(data=d) + 
geom_rect(aes(xmin=fac-0.4,xmax=fac+0.4,ymin=x,ymax=y),alpha=0.25,fill="red") 

plot

или вы хотите изменить, как рассчитывалась прозрачность используя другую реализацию графа()?

EDIT - если вы просто хотите, чтобы блокировать сетку с «подсчета» показаний:

library(ggplot2) 
set.seed(1) 
d <- data.frame(cbind(x = sample(1:3, 15, replace = TRUE), 
    y = sample(3:8, 18, replace = TRUE))) 

ggplot(data=d) + 
    geom_tile(aes(x=x,y=y),alpha=0.25,fill="red") 

plot-tile

+0

+1 Глядя на ваш ответ, я не могу понять почему я запустил цикл в первую очередь. И у вас есть хорошее понимание проблемы. Я полностью забыл упомянуть о прозрачности. Я просто связал другой столбец с аргументом 'alpha' внутри' aes', который исправил это. Любой способ сделать это непрерывным графиком вместо прямоугольников по каждой категории x? – TheComeOnMan

+0

Если вы просто ищете сетку x-y с прозрачностью, то вы можете использовать geom_tile, как указано выше, в редактировании? Не уверен, что это именно то, что вы хотите сделать, если все по-другому, можете ли вы описать на основе d? – Troy

+0

Нет, нет, вы были на правильном пути. Я имел в виду, что с сюжетом я не добавляю к вопросу, каждый прямоугольник является точкой данных, поэтому легенда обозначает прозрачность от наименьшего до самого большого значения счетчика прямоугольника. Однако на самом деле граф имеет прямоугольное перекрытие, а прозрачность должна находиться между кумулятивными прозрачными пленками при любых x, y. Любой способ сделать это? – TheComeOnMan