2013-08-29 2 views
2

с использованием следующего кадра данных:ggplot цвет ключа легенды и элементы

sdf<-data.frame(hours=gl(n=3,k=1,length=9,labels=c(0,2,4)),  
       count=c(4500,1500,2600,4000,800,200,1500,50,20), 
       machine=gl(n=3,k=3,length=9,labels=c("A","B","C"))) 

На следующем графике могут быть получены с использованием любого из этих сценариев:

ggplot(data=sdf,aes(x=hours,y=count,group=machine,fill=machine))+ 
    geom_area(data=sdf[sdf$machine=="A",])+ 
    geom_area(data=sdf[sdf$machine=="B",])+ 
    geom_area(data=sdf[sdf$machine=="C",]) 

ggplot(data=sdf,aes(x=hours,y=count,group=machine,fill=machine))+ 
    geom_area(position="dodge") 

enter image description here

Однако, когда цвет заливки изменяется, элемент в легенде исчезает.

ggplot(data=sdf,aes(x=hours,y=count,group=machine,fill=machine))+ 
    geom_area(data=sdf[sdf$machine=="A",])+ 
    geom_area(data=sdf[sdf$machine=="B",],fill="darkorchid")+ 
    geom_area(data=sdf[sdf$machine=="C",]) 

enter image description here

В идеале, легенда должна показать изменение цвета.

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

ответ

5

Вы можете отрегулировать значения, присвоенные любой эстетике, используя scale_ X _manual(values= (независимо) ). Здесь вы хотите scale_fill_manual.

ggplot(data=sdf,aes(x=hours,y=count,group=machine,fill=machine))+ 
    geom_area(position="dodge") + 
    scale_fill_manual(values=c("red", "darkorchid", "green")) 

enter image description here

Обратите внимание, что, как правило, вы хотите, чтобы ggplot сгруппировать данные для вас, как вы сделали в вашем втором ggplot вызова (Это то, что делает group аргумента). Поставляя каждый «срез» данных отдельно, как вы это делали в первом примере, в значительной степени побеждает цель ggplot2, и этого следует избегать.

+0

Так что спасибо за ответ на этот вопрос! Я, вероятно, задам еще один вопрос, как разделить эти графики по отдельности. Я хотел бы знать, как использовать альфа = 0,5 на графике для машины B, но не другие. – blehman

+1

Тот же принцип: '... + scale_alpha_manual (значения = c (1, 0.5, 1))' –

+0

Использование ... + scale_alpha_manual (values ​​= c (1, 0.5, 1)), к сожалению, не изменяет ни одну из альфа значения в этом примере. – blehman

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