在R中绘制平滑的曲线

标签:
r语言生物信息学不够部分对数 |
分类: R语言 |
excel画折线图的时候有一个好用的功能,“平滑线”可以帮助我们把折现图变得更加好看。今天在用R画折线图的时候碰到问题,如何用R来画平滑化的折线图?
用一组数据来看一下:计算3万多行的矩阵x的行1-539,540-11736,11737
之后的列均值并画出来其中11列的分布。
三部分的均值用R很容易计算
[1] 1.000000
1.101010 1.202020
1.303030 1.404040
1.505051 1.606061
[8] 1.707071
1.808081 1.909091
2.010101 2.111111
2.212121 2.313131
[15] 2.414141
2.515152 2.616162
2.717172 2.818182
2.919192 3.020202
[22] 3.121212
3.222222 3.323232
3.424242 3.525253
3.626263 3.727273
[29] 3.828283
3.929293 4.030303
4.131313 4.232323
4.333333 4.434343
[36] 4.535354
4.636364 4.737374
4.838384 4.939394
5.040404 5.141414
[43] 5.242424
5.343434 5.444444
5.545455 5.646465
5.747475 5.848485
[50] 5.949495
6.050505 6.151515
6.252525 6.353535
6.454545 6.555556
[57] 6.656566
6.757576 6.858586
6.959596 7.060606
7.161616 7.262626
[64] 7.363636
7.464646 7.565657
7.666667 7.767677
7.868687 7.969697
[71] 8.070707
8.171717 8.272727
8.373737 8.474747
8.575758 8.676768
[78] 8.777778
8.878788 8.979798
9.080808 9.181818
9.282828 9.383838
[85] 9.484848
9.585859 9.686869
9.787879 9.888889
9.989899 10.090909
[92] 10.191919 10.292929 10.393939 10.494949
10.595960 10.696970 10.797980
[99] 10.898990 11.000000
[1] 1.9795918 2.2352883 2.4662114 2.6730783
2.8566059 3.0175114 3.1565117
[8] 3.2743238 3.3716648 3.4492518 3.5078013
3.5474655 3.5667200 3.5637301
[15] 3.5366612 3.4836787 3.4029481 3.2926347
3.1509039 2.9759211 2.7658688
[22] 2.5225357 2.2557565 1.9764549 1.6955543
1.4239784 1.1726506 0.9524945
[29] 0.7744337 0.6493916 0.5881972 0.5943542
0.6589503 0.7718700 0.9229983
[36] 1.1022199 1.2994195 1.5044820 1.7072920
1.8977343 2.0658202 2.2064767
[43] 2.3210166 2.4111795 2.4787050 2.5253328
2.5528024 2.5628534 2.5572256
[50] 2.5376583 2.5059438 2.4650810 2.4192754
2.3727854 2.3298690 2.2947844
[57] 2.2717897 2.2651432 2.2791031 2.3179273
2.3854726 2.4795858 2.5934877
[64] 2.7202800 2.8530645 2.9849429 3.1090170
3.2183884 3.3061591 3.3654305
[71] 3.3899410 3.3799980 3.3397845 3.2735339
3.1854792 3.0798538 2.9608907
[78] 2.8328233 2.6998847 2.5663080 2.4361292
2.3119250 2.1956182 2.0891285
[85] 1.9943758 1.9132799 1.8477604 1.7997371
1.7711298 1.7638583 1.7798984
[92] 1.8215304 1.8911365 1.9910992 2.1238010
2.2916242 2.4969514 2.7421650
[99] 3.0296474 3.3617811
>dim(x)
[1] 37996 211
>cdt1<-apply(x[1:539,],2,mean)
>cdt2<-apply(x[540:11736,],2,mean)
>cdt3<-apply(x[11736:dim(x)[1],],2,mean)
#作图,画出其中均值的101到111分布
>
plot(cdt1[101:111],type='l',xlab='1~11',ylab='Means',col='red')
>
lines(cdt2[101:111],col='green')
>
lines(cdt3[101:111],col='blue')
图很丑吧~~?http://www/uc/myshow/blog/misc/gif/E___6706EN00SIGG.gif简直无法忍受,需要一些辅助手段帮助我们来进行一些变化。
>
m<-1:11
>
plot(spline(m,cdt1[101:111],n=100),type='l',xlab='1~11',ylab='Means',col='red')
>
lines(spline(m,cdt2[101:111],n=100),col='green')
>
lines(spline(m,cdt3[101:111],n=100),col='blue')
spline函数中的参数n是可调整的,设置的太大会导致曲线过度,设置的不够会导致曲线不够漂亮。比如下面这样http://www/uc/myshow/blog/misc/gif/E___6693EN00SIGG.gif
http://s3/mw690/572d4a6cgdbd0f3b88d12&690spline函数到底做了对数据做了什么?
>result<-spline(m,cdt1[101:111],n=100)
#函数生成了一个list,list里面两列数据
>
attributes(result)
$names
[1] "x" "y"
>
typeof(result)
[1] "list"
>result$x
> result$y