图形展示是最高效且形象的数据描述手段,因此巧妙的图像展示是高质量数据分析报告的必备内容,因此强大的图形展示功能也是统计分析软件的必备功能。R语言提供了强大的吐血展示功能。今天我由简单到复杂分别和小伙伴们分享如何用R语言画出各位想要的图形。
首先罗列下所有可选图形:
1、直方图(hist());2、散点图(plot());3、柱状图(barplot());4、饼图(pie());5、箱线图(boxplot());6、星相图(stars());7、脸谱图(faces());8、茎叶图(stem());9、QQ图(qqnorm());10、 地图包maps、mapdata、geosphere
为了方便地进行图形展示,我们创建一个数据场景,假设我们需要统计学生的3门课的考试情况。我们分别生成学号、高等数学(80到100的均匀分布)、线性代数(均值80,标准差为7的正态分布)和运筹学(均值83,标准差18的正态分布)三科成绩。相应的语句为:
Num=seq(102001,102100) X1=round(runif(100,min=80,max=100)) X2=round(rnorm(100,mean=80,sd=7)) X3=round(rnorm(100,mean=83,sd=18))
考虑到所有的成绩不能超过100分,因此需要将随机生成的成绩中高于100分的改为100分并将最终修正后的所有成绩连同学号存入数据框。
X2[which(X2>100)]=100 X3[which(X3>100)]=100 X=data.frame(Num,X1,X2,X3)
分别画出高等数学成绩的直方图、高等数学和线性代数的相关关系的散点图,运筹学成绩的柱状图和饼图,来观看各科成绩的分布情况。相应语句如下:
hist(X$X1) plot(X1,X2) barplot(table(X$X1)) pie(table(X$X1))
接着我们将三科成绩用两种箱线图画出来,箱线图可以更加清楚的解释数据的分布情况,和数据的集中区域。命令如下:
boxplot(X$X1, X$X2, X$X3) boxplot(X[2:4],col=c("red","green","blue"),notch=T)
为了更方便的观测单位个体的特性,R提供了星相图、脸谱图(根据脸的形状和眼睛的大小来反映数据)揭示每个个体属性上的差异,具体命令如下:
stars(X[c("X1","X2","X3")]) install.packages("TeachingDemos") library("TeachingDemos") faces2(X)
在形象化展示数据方面,R还提供了茎叶图控我们观看数据分布情况,命令如下:
stem(X$X2)
R语言还提供了判断数列是否服从正态分布的形象展示图形,可以简单的借助肉眼判断,当散落的点的分布越接近直线,则数列的分布越接近正态分布。命令如下:
qqnorm(X3) qqline(X3)
最后为大家介绍R语言提供的丰富的地图包功能,首先需要安装maps包,可以用来画出漂亮的世界地图,供我们做社交网络分析。遗憾的是该包不包含中国地图包,如若需要绘制中国地图,以方面建议加载mapdata包,另一方面,强烈建议谷歌贡献的ggmap包,相关命令如下:
library(maps) map("world",fill=TRUE,col=rainbow(200),ylim=c(-60,90),mar=c(0,0,0,0))
library(mapdata) map("china",col="red4",ylim=c(18,54),panel.first=grid())
最后以一个航空公司航线分布案例,结束今天的R语言绘图介绍,首先我先导入外部数据,然后构造航线,最终在图形中展示出来。命令如下:
airports <- read.csv("http://datasets.flowingdata.com/tuts/maparcs/airports.csv", header=TRUE) flights <- read.csv("http://datasets.flowingdata.com/tuts/maparcs/flights.csv", header=TRUE, as.is=TRUE) map("world",col="#f2f2f2",fill=TRUE,bg="white",lwd=0.5) fsub <- flights[flights$airline=="AA",] for (j in 1:length(fsub$airline)) { air1 <- airports[airports$iata == fsub[j,]$airport1,] air2 <- airports[airports$iata == fsub[j,]$airport2,] inter <- gcIntermediate(c(air1[1,]$long, air1[1,]$lat), c(air2[1,]$long, air2[1,]$lat), n=100, addStartEnd=TRUE) lines(inter, col="black", lwd=0.8) }
原文地址:http://blog.csdn.net/howardge/article/details/41681137