显示标签为“R learning”的博文。显示所有博文
显示标签为“R learning”的博文。显示所有博文

2013年1月4日星期五

用R做热点图heatmaps

首先我们选择mtcars 作为数据,他主要是70年代的汽车性能表现和机械设计的数据。我们来用这个数据做一个等级h热点图heatmap
1.首先将数据标准华为均值=1,标准差=0,使用scale()函数,并将结果转化为矩阵。

> mtscaled <- as.matrix(scale(mtcars))
2.创建热点图,去除对列重新排序的默认项。
> heatmap(mtscaled, Colv=F, scale='none')



















需要说明是,默认况下,R会同时根据列和行做聚类热点图,而且会依据均值对系统树进行重新排序,Colv=F表示拒绝重新排序。如果我们的数据是时间序列等已经有序的数据,我们可能就不需要对列排序,仅需要对行聚类,这样我们可以把参数设为Colv=NA,从上图我们可以看到hp、cyl、disp的关系较近,而且马力越大,速度越快越耗油。
3.如果我们需要指定聚类数目,比如我要把上图以行聚类的第一个分支的两簇分别做图,那我们就需要hclustcutree函数,而hclust函数必须根据距离矩阵执行
#首先以行聚类
> hc.rows <- hclust(dist(mtscaled))
#对矩阵转置,并重新以列聚类
> hc.cols <- hclust(dist(t(mtscaled)))
#对第一个分支聚类做热点图
> heatmap(mtscaled[cutree(hc.rows,k=2)==1,], Colv=as.dendrogram(hc.cols), scale='none')













对第二个分支聚类做热点图
> heatmap(mtscaled[cutree(hc.rows,k=2)==2,], Colv=as.dendrogram(hc.cols), scale='none')






如果你不喜欢这套热点图的颜色,你可以利用一下函数首先修改默认颜色再做图
> palette <- colorRampPalette(c('#f0f3ff','#0033BB'))(256)
> heatmap(mtscaled, Colv=F, scale='none', col=palette)








或者通过col参数直接设置
> heatmap(mtscaled[cutree(hc.rows,k=2)==2,], Colv=as.dendrogram(hc.cols), scale='none',col=topo.colors(100))
如果你要添加颜色图例的话你可以选择heatmap.2,它在gplot包里。

2013年1月3日星期四

R data.frame 操作例选



1.查看data.frame的开头
> head(df)
sequence start end 1 chromosome 1450 2112 2 chromosome 41063 41716 3 chromosome 62927 63640 4 chromosome 63881 64807 5 chromosome 71811 72701 2.选择data.frame特定的列
> df[,c('sequence','start','end')]
sequence start end 1 chromosome 1450 2112 2 chromosome 41063 41716 3 chromosome 62927 63640 4 chromosome 63881 64807 5 chromosome 71811 72701 ... 3.选择同时查看data.frame的列和行
> df[566:570,c('sequence','start','end')]
sequence start end 566 chromosome 480999 479860 567 chromosome 481397 480999 568 chromosome 503053 501275 569 chromosome 506476 505712 570 chromosome 515461 514277 4.SQL那样选择符合特定标准的行
df[df$value>3.0,]
sequence strand start end common_name value 199 chromosome + 907743 909506 hutU 3.158821 321 chromosome + 1391811 1393337 nadB 3.092771 556 chromosome - 431600 431037 apt 3.043373 572 chromosome - 519043 518186 hbd1 3.077040 5.选择包含特定内容的行列:找到tRNA
> df[grep("trna", df$common_name, ignore.case=T),]
sequence strand start end common_name value 18 chromosome + 115152 115224 Asn tRNA -0.461038128 19 chromosome + 115314 115422 Ile tRNA -0.925268307 31 chromosome + 167315 167388 Tyr tRNA 0.112527023 32 chromosome + 191112 191196 Ser tRNA 0.986357577 ... 6.复制行名称:行名成不仅在data.frame中使用,在矩阵中同样适用。 我们创建一个矩阵: > a = matrix(1:18, nrow=6, ncol=3) > rownames(a) <- c('a', 'a', 'a', 'b', 'b', 'b') > colnames(a) <- c('foo', 'bar', 'bat') > a foo bar bat a 1 7 13 a 2 8 14 a 3 9 15 b 4 10 16 b 5 11 17 b 6 12 18 如果我们只按照行名称选择查看的话,R反馈回来的只有符合该名称的第一行 > a['a',] foo bar bat 1 7 13 > a['b',] foo bar bat 4 10 16 但如果这样查询就能查看所有符合行名称的内容 > a[rownames(a)=='a',] foo bar bat a 1 7 13 a 2 8 14 a 3 9 15

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,...)
           }
就小文开始图形一样了。