2012年12月4日星期二

如何改变R绘图的图例和颜色


如何改变R绘图的图例和颜色
Lattice作图是在R中体现多变量数据关系的最好形式,我经常忘记怎么改变图例和颜色,所以写个小例子作为以后的参考。
首先,我想我做的图最终是这个样子滴:
好吧,现在开始,我利用MASS包中的Insurance数据做图:
library(mass)
library(lattice)
#画出不同地区不同年龄阶段的人申请保险的频率图
barchart(Claims/Holders~Age|Group, groups=District,
data=Insurance, origin=0, auto.key=T)


我通过auto.key 来改变图例,首先我希望图例相邻而不是默认的相接,另外我需要给图例添加标题并改变字体大小。
barchart(Claims/Holders~Age|Group, groups=District,
           data=Insurance,main="Claims frequency",
           auto.key=list(space="top", columns=4,
                         title="District",cex.title=1))

我想利用我自己的面板函数,但是图例会随之改变为默认的点状图例,怎么改变呢,下图,我制作了一个线性图,并把图例改为线型图例,
xyplot(Claims/Holders ~ Age | Group, groups=District,
         data=Insurance, t="l", main="Claims frequency",
         auto.key=list(space="top",columns=4,
                       title="District",cex.title=1,
                       lines=T,points=F))
现在我们来改变颜色,我们先来看一下lattice的默认设置
show.settings()
我们把颜色改为RColorBrewer调色板中的颜色
library(RColorBrewer)
display.brewer.all()
我喜欢蓝色,所以我要把图例改为边框和背景均为蓝色的。
my.settings <- list(superpose.polygon=list(col=myColours[2:5],border="transparent"),strip.background=list(col=myColours[6]),strip.border=list(col="black"))
所有的颜色设置可以通过函数trellis.par.get()列出,也可以通过trellis.par.get(my.setting)改变,但我们也可以临时改变lattice函数的
par.setting()参数达到目的。
好吧,我们把前面改变图例和颜色设置参数的语句连接起来。但是我再次把前面的线型图例改成方型。
barchart(Claims/Holders*100 ~ Age | Group, groups=District,
           data=Insurance, origin=0,
           main="Motor insurance claims frequency",
           xlab="Age", ylab="Claims frequency %",
           scales=list(alternating=1),
           auto.key=list(space="top", columns=4,
                         points=FALSE, rectangles=TRUE,
                         title="District", cex.title=1),
           par.settings=my.settings,
           par.strip.text=list(col="white",font=2) )
执行程序,图形就基本完成了,如果我还行加个网格线的话就可以更改为。
barchart(Claims/Holders*100 ~ Age | Group, groups=District,
           data=Insurance, origin=0,
           main="Motor insurance claims frequency",
           xlab="Age", ylab="Claims frequency %",
           scales=list(alternating=1),
           auto.key=list(space="top", columns=4,
                         points=FALSE, rectangles=TRUE,
                         title="District", cex.title=1),
           par.settings=my.settings,
           par.strip.text=list(col="white",font=2)
panel=function(x,y,...){
             panel.grid(h=-1,v=0);
             panel.barchart(x,y,...)
           }
就小文开始图形一样了。