Using the following data frame:
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")))
The following graph can be produced using either of these scripts:
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")
However, when the fill color is changed, the item in the legend disappears.
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",])
Ideally, the legend should show the color change.
Question: What script can create items in a legend as well as offer color controls for those items?
You can adjust the values assigned to any aesthetic using
scale_
X_manual(values=
(whatever))
. Here you wantscale_fill_manual
.Note that, as a rule, you want to let
ggplot
group the data for you, as you have done in your secondggplot
call (This is what thegroup
argument does). Supplying each 'slice' of data separately, as you have done in your first example, pretty much defeats the purpose ofggplot2
, and should be avoided.