我想在图表中添加图例。
但这对我来说非常困难。
所以请帮帮我......
library(ggplot2)
library(scales)
library(grid)
library(gcookbook)
data<-read.csv("maxmin.csv")
attach(data)
head(data)
str(data)
to<-ggplot(data,aes(x=obs,y=toaverage)) + geom_ribbon(aes(ymin=tomin,ymax=tomax),alpah=0.9,fill="grey50") + geom_line(colour="black")+ labs(x = "", y = "")+ scale_y_continuous(breaks=seq(0,70,10))+ expand_limits(max(data$tomax),y=c(0,70))
to<-to + theme(axis.text.x=element_blank())+ geom_ribbon(aes(ymin=tomax25,ymax=tomax75),alpah=0.9,fill="grey30") + theme(axis.ticks.x=element_blank())
to<- to + theme(line = element_blank())+ theme(text = element_text(size=15))
to<-to + geom_line(aes(y=toaverage),colour="black")
这是工作。
我想在底部添加一个图例
to<-to+ scale_colour_manual(value=c("black","grey50",grey"30"), breaks=c("toaverage","tomax","tomax25"), labels=c("average","(max,min)","(25%,75%)"))+ theme(legend.position="bottom")
但这不起作用..
(tomax25和tomax75是max和min的分位数)
实际上我想添加一条平均线,而grey50和灰色30是彩色框。
我如何解决这个问题。?
先谢谢。
答案 0 :(得分:1)
所以这应该让你开始。
# create sample dataset - you should provide this!!!
x <- 1:10
set.seed(1) # for reproducibble example
df <- data.frame(x,y=rnorm(100,mean=sample(x,10)))
gg <- aggregate(y~x,df,fivenum)
gg <- with(gg,data.frame(x,gg[,2]))
colnames(gg) <- c("x","tomin","tomax25","toaverage","tomax75","tomax")
# you start here, more or less...
library(ggplot2)
ggplot(gg,aes(x=x))+
geom_ribbon(aes(ymin=tomin,ymax=tomax,fill="Full.Range"),alpha=0.9)+
geom_ribbon(aes(ymin=tomax25,ymax=tomax75,fill="IQR"),alpha=0.9)+
geom_line(aes(y=toaverage,color="Mean"))+
scale_color_manual(name="",values=c(Mean="orange"),guide=guide_legend(order=1))+
scale_fill_manual(name="",values=c(Full.Range="grey70",IQR="grey30"),
breaks=c("Mean","IQR","Full.Range"))
我的评论和参考文章中的要点是要获得一个传奇,你必须创建一个美学映射。您可以通过将hte引用放入对aes(...)
的调用中的color / fill 来实现此目的。然后,您可以使用scale_fill_manual(...)
设置填充颜色,方法是将values=...
设置为指定的颜色矢量,如上所示。