• R语言
  • ggplot2图中添加文字说明求教

如下图:



我想在它的左上角加入一个lengend说明,内容是:在一个框里,取大的浅红色区域的颜色,然后后面写文字,再取拟合窄一点的区域的颜色,然后写文字,我这样说,大家能明白意思吗。。。

回复 第2楼 的 lovecos:

所以又修改了一下,并添加了注释。</p>
<p>library(ggplot2)<br />
library(scales)<br />
library(ISwR)<br />
#回归分析,ISwR数据<br />
options(na.action=na.exclude)<br />
#进行回归分析</p>
<p>lm.velo<-lm(short.velocity~blood.glucose,data=thuesen)<br />
#画图,做回归线<br />
qplot(blood.glucose,short.velocity,data=thuesen)+geom_smooth(method="lm")<br />
#预测值<br />
fitted(lm.velo)<br />
#残差<br />
resid(lm.velo)<br />
#计算prediction bands,就是预测值的误差<br />
#提取方法,predict(lm.velo,int="p")<br />
#先定义自变量的范围,要使用data.frame格式<br />
pred.frame <- data.frame(blood.glucose=thuesen$blood.glucose)<br />
##pp里包含了预测值及其上下可信区间<br />
pp<-predict(lm.velo,int="p",newdata=pred.frame)<br />
#将自变量和预测值合并为一个df<br />
mydf<-data.frame(pred.frame,pp)<br />
#将预测值,原始数据和残差合并为一个df<br />
my.naexclude <- data.frame(thuesen,fitted=fitted(lm.velo),resid=resid(lm.velo))<br />
my.naexclude <- my.naexclude[!is.na(my.naexclude$short.velocity),]</p>
<p>#画回归,链接点和回归线<br />
qplot(blood.glucose,short.velocity,data=my.naexclude)+<br />
  geom_smooth(method="lm")+ #geom_smooth可以直接画出y的mean structure的可信区间,用se=T/F控制<br />
  #linerange用来连接y的实际数据和预测值<br />
  geom_linerange(aes(ymin=fitted,ymax=short.velocity),data=my.naexclude,fullrange=T,colour="grey50")+<br />
  #geom_ribbon用来画预测值的可信区间<br />
  geom_ribbon(aes(x=blood.glucose,y=NULL,ymin=lwr,ymax=upr),data=mydf,fill="red",alpha=I(1/10))<br />
本文来自: 人大经济论坛 S-Plus&R专版 版,详细出处参考: http://bbs.pinggu.org/forum.php?mod=viewthread&tid=1439399&page=1


这是原文的代码,我是想模仿你给我的那2个连接中的例子,添加1个图利,就是颜色和我图中的一样,文字我自己写...我说清楚了吗......
</p>

回复 第2楼 的 lovecos:我就是想在图中加个图例,然后颜色取geom_ribbon中设置的红色,alpha=0.1那个,然后文字是95%置信区间,好让大家一看就知道我图中那个最大范围的阴影就是95%的置信区间。。。。这是一元回归,不知道你可有耐心帮我看下怎么做呢,我刚接触ggplot2

回复 第3楼 的 superdesolator:

在原来的code上稍微修改一下

</p>
<p>lm.velo<-lm(short.velocity~blood.glucose,data=thuesen)</p>
<p>qplot(blood.glucose,short.velocity,data=thuesen)+geom_smooth(method="lm")</p>
<p>fitted(lm.velo)<br />
resid(lm.velo)</p>
<p>pred.frame <- data.frame(blood.glucose=thuesen$blood.glucose)</p>
<p>pp<-predict(lm.velo,int="p",<br />
            newdata=pred.frame,<br />
            interval ="prediction") ## note I changed here</p>
<p>mydf<-data.frame(pred.frame,pp)<br />
my.naexclude <- data.frame(thuesen,fitted=fitted(lm.velo),resid=resid(lm.velo))<br />
my.naexclude <- my.naexclude[!is.na(my.naexclude$short.velocity),]</p>
<p>## several changes within qplot<br />
qplot(blood.glucose,short.velocity,data=my.naexclude)+<br />
    geom_smooth(method="lm", aes(fill="confidence"))+<br />
    geom_linerange(aes(ymin=fitted,ymax=short.velocity),<br />
                   data=my.naexclude,<br />
                   fullrange=T,<br />
                   colour="grey50")+<br />
    geom_ribbon(aes(x=blood.glucose,y=fit,ymin=lwr,ymax=upr, fill="prediction"),<br />
                data=mydf,<br />
                alpha=I(1/10))+<br />
    scale_fill_manual(values=c("blue", "green"),<br />
                      name="What_is_it",<br />
                      breaks=c("confidence", "prediction"),<br />
                      labels=c("Say_this", "Say_that"))</p>
<p>
</p>

回复 第5楼 的 YSU:不好意思我对你的代码有2个地方没懂:1是,geom_smooth函数里的fill=confidence是什么意思呢?我看它说这个区域应该是一个叫mean structure的可信区间,然而我不知道什么是mean structure

2是geom_ribbon里的fill=prediction什么意思呢?是你人为设置的么,然后再在scale_fill_manual里指定 这两个fill的value么?同时也输出到了图例中吗?

前天刚接触完全不懂,问的有点多,见谅啊!

回复 第6楼 的 superdesolator:

5楼已经把你的问题给解决了,一起学习了![s:13]

geom_smooth函数和geom_ribbon函数里的fill参数设置都是人为设置的,注意它们是放在aes函数中的(让我想到了ggplot中关于设定和映射的区别[s:11]),这里就是一个标记,5楼在后面的scale_fill_manual中对其进行了详细的设置。

其实你可以只运行下面的代码(即不添加scale_fill_manual()函数)看看绘出的图是什么效果。

<br />
qplot( blood.glucose, short.velocity, data=my.naexclude ) +<br />
    geom_smooth( method="lm", aes( fill="confidence" )) +<br />
    geom_linerange( aes( ymin=fitted, ymax=short.velocity), fullrange=T, colour="grey50") +<br />
    geom_ribbon( aes(x=blood.glucose, y=fit,ymin=lwr,ymax=upr, fill="prediction"), data=mydf, alpha=I(1/10))<br />
</p>

然后你就明白5楼的意思了!

一起学习了![s:11]

3 年 后
好几处没看明白。有的还是蛮复杂的。