简体   繁体   中英

ggplot legend key color and items

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

在此处输入图片说明

Note that, as a rule, you want to let ggplot group the data for you, as you have done in your second ggplot call (This is what the group argument does). Supplying each 'slice' of data separately, as you have done in your first example, pretty much defeats the purpose of ggplot2 , and should be avoided.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM