原创:如何用R语言绘制折线图,展现多维(四维)以上数据

发布时间:2017-08-11 20:32:28

问题引出

我相信,你能够用图形灵活展示二维数据、三维的数据,甚至四维的数据!

可是,你能够在同一个图形中同事展现多个维度(四维以上)的数据吗?恐怕很多人都认为很难。

遗憾的是,现实生活中,我们经常需要在同一个图形中同事展现多个维度(四维以上)的数据,因为每一个统计研究个体往往都有十几个,上百个指标。

遗憾的是,我们很容易能够使用的一般的统计图形对于展现低维度(例如,2维),具有直观形象生动具体等特点,但是对于展现高维度则显得力不从心。

本文介绍一种简单的折线图,能够在同一个图形中同事展现多个维度(四维以上)的数据。本文将如何结合一个具体的数据,从简单到复杂,介绍如何使用R语言绘制这样的图形。

不同图形效果对比

例如,为了了解购买某产品的客户特征,收集了客户的20种属性,例如,年龄、年收入、性别等,打算用图形观察属性间的关系特征:图1用散点图展现的是两个维度——年收入与年龄,可以轻松看出年收入和年龄是没有关系的;图2通过点的颜色,能够多展现一维——isbuy是否购买,可以轻松看出购买者主要是低收入者,但是和年龄没有关系;图3展现了四维——增加了性别,可以看出女性几乎不买,男性只有低收入的才会买,高收入的不会买。

从三幅图中,可以看到图形能够展现四维,可是,图4区能够展示两个年度13个指标的数据,从中两个年度13个指标的走势,可以看出两个年度各个指标的差异程度与联系程度,由此可以看出图4的优势了?

接下来,我一步一步看看,如何实现这个图形

1 3

3

4

从简单到复杂绘图

原始数据

首先,将这个数据存成文件:A.CSV

2016

2015

增长率(%)

权重

1.1 对所学专业

0.3171

0.3006

5.4655

1.0000

1.2 对教师教学态度

0.3280

0.3027

8.3773

1.0000

1.3 对教师教学水平

0.3254

0.3039

7.0745

1.0000

1.4 对教学方法与手段

0.3116

0.2918

6.7912

2.0000

1.5 对课程设置

0.2970

0.2684

10.6891

2.0000

1.6 对教材选用

0.3012

0.2799

7.6265

1.0000

1.7 对课外辅导与作用

0.2969

0.2684

10.6156

1.0000

1.8 对职业能力训练

0.3085

0.2927

5.4062

2.0000

2.1 对学风考风

0.3185

0.3036

4.9126

1.0000

2.2 对实验、实习、实践质量

0.3104

0.2898

7.0993

2.0000

2.3 对就业创业指导

0.3071

0.2871

6.9888

1.0000

3.1 对教室和自习场所

0.3077

0.2878

6.9092

1.0000

3.2 对实验室条件和使用

0.3031

0.2758

9.9088

1.0000

读取数据

alldata=read.csv("d:\\A.csv") #读入数据

绘制普通散点图(2016年数据)

t=1:13 #13个指标,要转换为x轴上的13个点

plot(t,alldata$X2016,type='o',pch=4)

Typepch的含义,参考PLOT参数说明

X轴,希望能够显示具体的指标名称,如何实现?

X轴坐标换成指标名称

plot(alldata$X,alldata$X2016,type='o',pch=4)

?其他都一样,就是x参数不一样了,图形有非常大的变化

从理论上看,这个语句能够直接实现题目最早的意图了,但是实际结果却不尽人意

解决新问题:如何将两条线画在一个图上

关键语句:

par(new=T)

完整过程:

plot(t,alldata$X2016,type='o',pch=4)

par(new=T)

plot(t,alldata$X2015,type='o',pch=4)

结果:

问题:y轴坐标重叠错乱了(注意观察y轴),并且刻度不一样,两条线一些点不一样,但是却被绘制成重叠在一起了。

看来不能简单讲两个线条或图形叠加。

统一刻度

iCols=13

ydata=cbind(alldata$X2016,alldata$X2015)

yScale=c(max(ydata),min(ydata),rep(0, iCols-2))

--yScalexScale的长度和实际要绘制图形的数据要一致,所以,这里需要调整

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=13

ydata=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))

注意这里的两个参数:

ylimcolor

类似的还有xlim

注意ylim的大小反了,结果图形y坐标也是反的

问题:x轴为什么不能间隔1

下一个要解决的问题:按照权重大小绘制点大小

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)

注意参数cex

调整刻度间隔

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)

注意参数xaxt

调整标签和示意

a=c("2015","2016")

legend("bottomright", as.matrix(a), pch=1,text.col=c(3,4))

注意函数legend

标签和标题

iCols=13

ydata=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"20152016满意度指标对比图"

a=c("2015","2016")

legend("bottomright", as.matrix(a), pch=1,text.col=c(3,4))

注意参数xlab\ylab和函数title

坐标值垂直显示

op <- par(mar=c(12,5,3,3)+.1)

iCols=13

ydata=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"20152016满意度指标对比图"

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函数,axislas参数,和plotlas参数一样

函数plot的参数说明

Type

线条类型:散点图,还是线图,由这个参数决定

Pch

图形点的形状

xlim

x坐标轴的范围

ylim

y坐标轴的取值范围

ylim=c(最小值,最大值)

color

col=某个数字

cex

用来绘制点面积用

cel=某个数

las

随即帮助说明如下:

xaxt

绘制线条函数: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="The Exponential Density Distribution")  

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(.512,5)), lwd=1,col=c("red""green","blue","orange"))  

原创:如何用R语言绘制折线图,展现多维(四维)以上数据

相关推荐