写在前面:为啥不用excel绘制这些图,用PoweBI,帆软BI等可视化软件来绘图,不是更方便吗?的确,这些工具都很方便,但同时,它们显得很呆,不够灵活,更为致命的是,它们绘制出的图形,分辨率不够,用来出版论文,是不合格的。所以,要做学术的朋友,对R,Python可视化绘图感兴趣的朋友,不妨下点功夫将这些技术学到手。
我之所以,将自己花费4个晚上,8个小时整理出来的文档分享出来,无非是为了减少大家学习技术的时间,我深知入门一种语言的艰辛,因为我在学习的时候,也是网上各种找资料,一个软件下载安装完毕,花费大半天的时间,当初学习一门语言的激情都走了大半;所以,希望大家能够快速上手,将时间花费在能真正提高技术的地方,比如设置图形的颜色,宽度,线条,灵活的修改图形等方面,这也是我接下来要研究的。
看在我这么辛苦的份上,看完不妨点个赞。。。文章最后放本文所需要的软件安装过程链接,用R与Python绘制中国地图,某省地图,以及可视化技术的介绍。。。
本文要绘制的图形以及如何使用这些图形:散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图、二元变量分布和成对关系。
用R绘图
软件:w10版Rstudio
条形图通过垂直的或水平的条形展示了类别型变量的分布(频数)。
> install.packages("vcd")
> library(vcd)
> counts<-table(Arthritis$Improved)
> counts
None Some Marked
42 14 28
> barplot(counts,main="简单的条形图",xlab="Improvement",ylab="Frequency")
> counts<-table(Arthritis$Improved,Arthritis$Treatment)
> counts
Placebo Treated
None 29 13
Some 7 7
Marked 7 21
> plot(counts,main="堆砌条形图",xlab="Treatment",ylab="Frequency",col=c("red","yellow","green"))
> barplot(counts,main="堆砌条形图",xlab="Treatment",ylab="Frequency",col=c("red","yellow","green"),legend=rownames(counts))
> barplot(counts,main="分组条形图",xlab="Treatment",ylab="Frequency",col=c("red","yellow","green"),beside=T,legend=rownames(counts))
> states<-data.frame(state.region,state.x77)
> means<-aggregate(states$Illiteracy,by=list(state.region),FUN=mean)
> means<-means[order(means$x),]
> barplot(means$x,names.arg=means$Group.1)
> title("均值条形图")
使用中注意:我用plot()与barplot()绘制的堆砌条形图并不一样!!!要想使得条形图“横着放”,barplot()函数中加上horiz=T
在绘图堆砌条形图时,使用table()函数将数据表格化,之所以使用table()是为了防止类别型变量不是因子,本例中Arthritis$Improved是一个因子。
散点图的英文叫做 scatter plot,它将两个变量的值显示在二维坐标中,非常适合展示两个变量之间的关系。
> x<-rnorm(100)
> y<-2*x+rnorm(100)
> plot(x,y,main="Linearly correlated random numbers",xlab="x",ylab="2*x+noise",xlim=c(-4,4),ylim=c(-4,4))
> plot(0:25,0:25,pch=0:25,xlim=c(-1,26),ylim=c(-1,26),main="point stytles (pch)")
> text(0:25+1,0:25,0:25)
> plot(x,y,pch=ifelse(x*y>1,16,1),main="scatter plot with conditional point styles")
> z<-sqrt(1+x^2)+rnorm(100)
> plot(x,y,pch=1,xlim=range(x),ylim=range(y,z),xlab="x",ylab="values")
> points(x,z,pch=17)
> title("scatter plot with two series")