您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 原创:如何用R语言绘制折线图-展现多维(四维)以上数据
1问题引出我相信,你能够用图形灵活展示二维数据、三维的数据,甚至四维的数据!可是,你能够在同一个图形中同事展现多个维度(四维以上)的数据吗?恐怕很多人都认为很难。遗憾的是,现实生活中,我们经常需要在同一个图形中同事展现多个维度(四维以上)的数据,因为每一个统计研究个体往往都有十几个,上百个指标。遗憾的是,我们很容易能够使用的一般的统计图形对于展现低维度(例如,2维),具有直观、形象、生动、具体等特点,但是对于展现高维度则显得力不从心。本文介绍一种简单的折线图,能够在同一个图形中同事展现多个维度(四维以上)的数据。本文将如何结合一个具体的数据,从简单到复杂,介绍如何使用R语言绘制这样的图形。2不同图形效果对比例如,为了了解购买某产品的客户特征,收集了客户的20种属性,例如,年龄、年收入、性别等,打算用图形观察属性间的关系特征:图1用散点图展现的是两个维度——年收入与年龄,可以轻松看出年收入和年龄是没有关系的;图2通过点的颜色,能够多展现一维——isbuy是否购买,可以轻松看出购买者主要是低收入者,但是和年龄没有关系;图3展现了四维——增加了性别,可以看出女性几乎不买,男性只有低收入的才会买,高收入的不会买。从三幅图中,可以看到图形能够展现四维,可是,图4区能够展示两个年度13个指标的数据,从中两个年度13个指标的走势,可以看出两个年度各个指标的差异程度与联系程度,由此可以看出图4的优势了?接下来,我一步一步看看,如何实现这个图形图1图3图3图43从简单到复杂绘图3.1原始数据首先,将这个数据存成文件:A.CSV20162015增长率(%)权重1.1、对所学专业0.31710.30065.46551.00001.2、对教师教学态度0.32800.30278.37731.00001.3、对教师教学水平0.32540.30397.07451.00001.4、对教学方法与手段0.31160.29186.79122.00001.5、对课程设置0.29700.268410.68912.00001.6、对教材选用0.30120.27997.62651.00001.7、对课外辅导与作用0.29690.268410.61561.00001.8、对职业能力训练0.30850.29275.40622.00002.1、对学风考风0.31850.30364.91261.00002.2、对实验、实习、实践质量0.31040.28987.09932.00002.3、对就业创业指导0.30710.28716.98881.00003.1、对教室和自习场所0.30770.28786.90921.00003.2、对实验室条件和使用0.30310.27589.90881.00003.2读取数据alldata=read.csv(d:\\A.csv)#读入数据3.3绘制普通散点图(2016年数据)t=1:13#13个指标,要转换为x轴上的13个点plot(t,alldata$X2016,type='o',pch=4)Type和pch的含义,参考PLOT参数说明X轴,希望能够显示具体的指标名称,如何实现?3.4X轴坐标换成指标名称plot(alldata$X,alldata$X2016,type='o',pch=4)?其他都一样,就是x参数不一样了,图形有非常大的变化从理论上看,这个语句能够直接实现题目最早的意图了,但是实际结果却不尽人意3.5解决新问题:如何将两条线画在一个图上关键语句:par(new=T)完整过程:plot(t,alldata$X2016,type='o',pch=4)par(new=T)plot(t,alldata$X2015,type='o',pch=4)结果:问题:y轴坐标重叠错乱了(注意观察y轴),并且刻度不一样,两条线一些点不一样,但是却被绘制成重叠在一起了。看来不能简单讲两个线条或图形叠加。3.6统一刻度iCols=13ydata=cbind(alldata$X2016,alldata$X2015)yScale=c(max(ydata),min(ydata),rep(0,iCols-2))--yScale和xScale的长度和实际要绘制图形的数据要一致,所以,这里需要调整xScale=c(1:iCols)--关键绘制一个空的图结构plot(xScale,yScale,type='n')然后在开始绘制图形par(new=T)plot(xScale,alldata$X2016,type='o',pch=4)par(new=T)plot(xScale,alldata$X2015,type='o',pch=4)****************遗憾的是,以上的努力没有收到预期效果---iCols=13ydata=cbind(alldata$X2016,alldata$X2015)xScale=c(1:iCols)plot(xScale,alldata$X2015,col=3,type='o',ylim=c(max(ydata)+0.05,min(ydata)-0.05))par(new=T)plot(xScale,alldata$X2016,col=4,type='o',ylim=c(max(ydata)+0.05,min(ydata)-0.05))注意这里的两个参数:ylim、color类似的还有xlim注意ylim的大小反了,结果图形y坐标也是反的问题:x轴为什么不能间隔1?3.7下一个要解决的问题:按照权重大小绘制点大小plot(xScale,alldata$X2015,col=3,type='o',ylim=c(min(ydata)-0.05,max(ydata)+0.05),cex=alldata$权重,pch=16)par(new=T)plot(xScale,alldata$X2016,col=4,type='o',ylim=c(min(ydata)-0.05,max(ydata)+0.05),cex=alldata$权重,pch=16)注意参数cex3.8调整刻度间隔plot(xScale,alldata$X2015,col=3,type='o',ylim=c(min(ydata)-0.05,max(ydata)+0.05),cex=alldata$权重,pch=16,xaxt=n)par(new=T)plot(xScale,alldata$X2016,col=4,type='o',ylim=c(min(ydata)-0.05,max(ydata)+0.05),cex=alldata$权重,pch=16,xaxt=n)axis(1,1:13)注意参数xaxt3.9调整标签和示意a=c(2015,2016)legend(bottomright,as.matrix(a),pch=1,text.col=c(3,4))注意函数legend3.10标签和标题iCols=13ydata=cbind(alldata$X2016,alldata$X2015)xScale=c(1:iCols)plot(xScale,alldata$X2015,col=3,type='o',ylim=c(min(ydata)-0.05,max(ydata)+0.05),cex=alldata$权重,pch=16,xaxt=n,xlab=指标,ylab=满意度得分)par(new=T)plot(xScale,alldata$X2016,col=4,type='o',ylim=c(min(ydata)-0.05,max(ydata)+0.05),cex=alldata$权重,pch=16,xaxt=n,xlab=指标,ylab=满意度得分)axis(1,1:13)title(2015和2016满意度指标对比图)a=c(2015,2016)legend(bottomright,as.matrix(a),pch=1,text.col=c(3,4))注意参数xlab\ylab和函数title3.11坐标值垂直显示op-par(mar=c(12,5,3,3)+.1)iCols=13ydata=cbind(alldata$X2016,alldata$X2015)xScale=c(1:iCols)plot(xScale,alldata$X2015,col=3,type='o',ylim=c(min(ydata)-0.05,max(ydata)+0.05),cex=alldata$权重,pch=16,xaxt=n,xlab=,ylab=满意度得分)par(new=T)plot(xScale,alldata$X2016,col=4,type='o',ylim=c(min(ydata)-0.05,max(ydata)+0.05),cex=alldata$权重,pch=16,xaxt=n,xlab=,ylab=满意度得分)title(2015和2016满意度指标对比图)a=c(2015,2016)legend(bottomright,as.matrix(a),pch=1,text.col=c(3,4))axis(side=1,1:13,tcl=-0.2,labels=B,las=2)注意参数par函数,axis的las参数,和plot的las参数一样4函数plot的参数说明4.1Type线条类型:散点图,还是线图,由这个参数决定4.2Pch图形点的形状4.3xlimx坐标轴的范围4.4ylimy坐标轴的取值范围ylim=c(最小值,最大值)4.5colorcol=某个数字4.6cex用来绘制点面积用cel=某个数4.7las随即帮助说明如下:4.8xaxt5绘制线条函数:lines的使用范例set.seed(1000)x-seq(-1,2,length.out=100)y-dexp(x,0.5)plot(x,y,col=red,xlim=c(0,2),ylim=c(0,5),type='l',xaxs=i,yaxs=i,ylab='density',xlab='',main=TheExponentialDensityDistribution)lines(x,dexp(x,1),col=green)lines(x,dexp(x,2),col=blue)lines(x,dexp(x,5),col=orange)legend(topright,legend=paste(rate=,c(.5,1,2,5)),lwd=1,col=c(red,green,blue,orange))
本文标题:原创:如何用R语言绘制折线图-展现多维(四维)以上数据
链接地址:https://www.777doc.com/doc-3810548 .html