2012-06-23 2 views
16

На картинке написано более тысячи слов. Как вы можете видеть, мой fill основан на переменной variable.R ggplot barplot; Заполнение на основе двух отдельных переменных

Внутри каждого бара есть, однако, несколько объектов данных (черные границы), поскольку дискретная переменная complexity делает их уникальными. То, что я пытаюсь найти, - это то, что делает каждый раздел панели более различимым, чем текущий вид. Предпочтительным было бы, если бы это было что-то вроде затенения.

http://s12.postimage.org/ltgs677ul/snapshot2.png

Вот пример (не тот же набор данных, так как оригинал был импортирован):

dat <- read.table(text = "Complexity Method Sens Spec MMC 
1 L Alpha 50 20 10 
2 M Alpha 40 30 80 
3 H Alpha 10 10 5 
4 L Beta 70 50 60 
5 M Beta 49 10 80 
6 H Beta 90 17 48 
7 L Gamma 19 5 93 
8 M Gamma 18 39 4 
9 H Gamma 10 84 74", sep = "", header=T) 

library(ggplot2) 
library(reshape) 
short.m <- melt(dat) 
ggplot(short.m, aes(x=Method, y= value/100 , fill=variable)) + 
    geom_bar(stat="identity",position="dodge", colour="black") + 
    coord_flip() 
+0

Там ничего не мешает вам добавить [воспроизводимый пример] (HTTP: //stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) хотя :) – Chase

+0

Добавлен пример;) – user1476968

ответ

19

Это далеко от совершенства, но, надеюсь, это шаг в правильном направлении, как это уклонился от variable, но все же удается представить Complexity каким-то образом:

ggplot(short.m, aes(x=Method, y=value/100, group=variable, fill=variable, alpha=Complexity,)) + 
    geom_bar(stat="identity",position="dodge", colour="black") + 
    scale_alpha_manual(values=c(0.1, 0.5, 1)) + 
    coord_flip() 

enter image description here

+0

Это абсолютно блестяще! Именно то, что мне нужно было продолжить. – user1476968

+0

Единственная проблема с этим решением заключается в том, что бары неясны друг другу. В Alpha Spec есть фактически H-бар, но он полностью скрыт, так как он был нарисован первым (H до L и M). Поскольку альфа-значения также добавляются друг к другу, нельзя сказать, какой из них (см. Бета-Spec). Очевидно, мы знаем, что средняя линия для H, но читатель, скорее всего, не будет. – user1476968

0

Трудно быть уверенным, не воспроизводимым, например, как сказал Чейз, но добавление alpha=complexity может работать :

ggplot(short.m, aes(x=Method, y= value/100 , fill=variable, alpha=complexity)) + 
geom_bar(stat="identity",position="dodge", colour="black") + coord_flip() 
+0

Попытайтесь добавить в воспроизводимый пример в этот понедельник. – user1476968

+0

Проблема с использованием альфы (подобно использованию цвета) заключается в том, что бары будут уклоняться от друг друга. То, что я идеально пытаюсь получить, - это сложная альфа (сложность) и уклоняющаяся переменная (которая расплавляется MMC, Sens и Spec) – user1476968

0

Вы, возможно, потребуется отделить Method и variable факторы. Есть два способа сделать это:

Использование facet_wrap():

ggplot(short.m, aes(x=variable, y=value/100, fill=Complexity)) + 
    facet_wrap(~ Method) + geom_bar(position="stack", colour="black") + 
    scale_alpha_manual(values=c(0.1, 0.5, 1)) + coord_flip() 

Используйте как на оси х:

ggplot(short.m, aes(x=Method:variable, y=value/100, group=Method, fill=variable, alpha=Complexity,)) + 
    geom_bar(stat="identity", position="stack", colour="black") + 
    scale_alpha_manual(values=c(0.1, 0.5, 1)) + coord_flip() 
+0

Я попробую это завтра утром и посмотрю, как это работает. ;) – user1476968

+0

Проблема с этим решением заключается в том, что он действительно не складывает столбцы, он просто добавляет их друг к другу. Поскольку такие два одинаково длинных Spec MC могут появляться по разным длинам, так как они не расположены параллельно. – user1476968

+0

Хорошо, я думаю, теперь понимаю, что вы пытались сделать. В ggplot «стек» означает добавление их друг к другу. Насколько мне известно, такой тип стека, который вы хотите, невозможно в ggplot. Я думаю, что это ваш лучший вариант: 'ggplot (short.m, aes (x = variable, y = value/100, fill = Complexity)) + facet_wrap (~ Method) + geom_bar (position =" dodge ", color =" черный ") + coord_flip()' или, может быть, 'ggplot (short.m, aes (x = Метод: переменная, y = значение/100, fill = Сложность)) + geom_bar (position =" dodge ", color =" black ") + coord_flip() ' –

Смежные вопросы