如何用R语言绘制饼图和条形图
R语言提供来大量的库来实现绘图功能。
饼图,或称饼状图,是一个划分为几个扇形的圆形统计图表,用于描述量、频率或百分比之间的相对关系。
R语言使用pie()函数来实现饼图,语法格式如下:
pie(x,labels=names(x),edges=200,radius=0.8, clockwise=FALSE,init.angle=if(clockwise)90else0, density=NULL,angle=45,col=NULL,border=NULL, lty=NULL,main=NULL,…)
- x:数值向量,表示每个扇形的面积。
- labels:字符型向量,表示各扇形面积标签。
- edges:这个参数用处不大,指的是多边形的边数(圆的轮廓类似很多边的多边形)。
- radius:饼图的半径。
- main:饼图的标题。
- clockwise:是一个逻辑值,用来指示饼图各个切片是否按顺时针做出分割。
- angle:设置底纹的斜率。
- density:底纹的密度。默认值为NULL。
- col:是表示每个扇形的颜色,相当于调色板。
绘制饼状图要做这些准备:反映数量的向量、各部分的标签、各部分的颜色(可选)。
饼图绘制
#数据准备 info=c(1,2,4,8) #命名 names=c("Google","Runoob","Taobao","Weibo") #涂色(可选) cols=c("#ED1C24","#22B14C","#FFC90E","#3f48CC") #绘图 pie(info,labels=names,col=cols)
执行绘图程序,会在当前目录下生存一个PDF文件(Rplots.pdf),打开文件可以看到图形效果如下:
我们也可以使用png()、jpeg()、bmp()函数设置输出的文件格式为图片:
#数据准备 info=c(1,2,4,8) #命名 names=c("Google","Runoob","Taobao","Weibo") #涂色(可选) cols=c("#ED1C24","#22B14C","#FFC90E","#3f48CC") #设置输出图片 png(file='runoob-pie.png',height=300,width=300) #绘图 pie(info,labels=names,col=cols)
接下来我们给饼图设置标题,中文字体需要设置字体参数family='GB1',也可以自己设置字体库,详细参考:R绘图-中文支持。
#数据准备 info=c(1,2,4,8) #命名 names=c("Google","Runoob","Taobao","Weibo") #涂色(可选) cols=c("#ED1C24","#22B14C","#FFC90E","#3f48CC") #计算百分比 piepercent=paste(round(100*info/sum(info)),"%") #绘图 pie(info,labels=piepercent,main="网站分析",col=cols,family='GB1') #添加颜色样本标注 legend("topright",names,cex=0.8,fill=cols)
如果要绘制3D的饼图,可以使用plotrix库的pie3D()函数,使用前我们需要先安装:
install.packages("plotrix",repos=https://mirrors.ustc.edu.cn/CRAN/)
#载入plotrix library(plotrix) #数据准备 info=c(1,2,4,8) #命名 names=c("Google","Runoob","Taobao","Weibo") #涂色(可选) cols=c("#ED1C24","#22B14C","#FFC90E","#3f48CC") #设置文件名,输出为png png(file="3d_pie_chart.png") #绘制3D图,family要设置你系统支持的中文字体库 pie3D(info,labels=names,explode=0.1,main="3D图",family="STHeitiTC-Light")
生成图片如下所示:
条形图绘制
条形图,也称为柱状图条形图,是一种以长方形的长度为变量的统计图表。
条形图可以是水平或垂直的,每个长方形可以有不同的颜色。
R语言使用barplot()函数来创建条形图,格式如下:
barplot(H,xlab,ylab,main,names.arg,col,beside)
参数说明:
- H向量或矩阵,包含图表用的数字值,每个数值表示矩形条的高度。
- xlabx轴标签。
- ylaby轴标签。
- main图表标题。
- names.arg每个矩形条的名称。
- col每个矩形条的颜色。
接下来我们创建一个简单的条形图:
#准备一个向量 cvd19=c(83534,2640626,585493) #显示条形图 barplot(cvd19)
执行绘图程序,会在当前目录下生存一个PDF文件(Rplots.pdf),打开文件可以看到图形效果如下:
为了更好地表达信息,我们可以在图表上添加标题、颜色及每个矩形条的名称。
以下我们创建2020年7月1日中国、美国和印度的新冠疫情确诊人数统计图。
中文字体需要设置字体参数family='GB1':
cvd19=c(83534,2640626,585493) barplot(cvd19, main="新冠疫情条形图", col=c("#ED1C24","#22B14C","#FFC90E"), names.arg=c("中国","美国","印度"), family='GB1' )
barplot中的数据既可以是向量,也可以是矩阵,现在我们生成一张新冠疫情6月和7月对比图。
首先准备数据:
中国 | 美国 | 印度 | |
---|---|---|---|
6月 | 83017 | 1794546 | 190535 |
7月 | 83534 | 2640626 | 585493 |
转换成矩阵,生成条形图,按并排格式显示,而且要显示颜色样本。
这里我们设置了自己的字体库,详细内容可以参考R绘图-中文支持
library(showtext); font_add("SyHei","SourceHanSansSC-Bold.otf"); cvd19=matrix( c(83017,83534,1794546,2640626,190535,585493), 2,3 ) #设置文件名,输出为png png(file="runoob-bar-1.png") #加载字体 showtext_begin(); colnames(cvd19)=c("中国","美国","印度") rownames(cvd19)=c("6月","7月") barplot(cvd19,main="新冠疫情条形图",beside=TRUE,legend=TRUE, family='SyHei') #去掉字体 showtext_end();
以下代码会在当前程序目录下生存一个runoob-bar-1.png文件,如下所示:
我们设置的颜色样本将是每各组的颜色样本:
library(plotrix) library(showtext); font_add("SyHei","SourceHanSansSC-Bold.otf"); cvd19=matrix( c(83017,83534,1794546,2640626,190535,585493), 2,3 ) #设置文件名,输出为png png(file="runoob-bar-2.png") #加载字体 showtext_begin(); colnames(cvd19)=c("中国","美国","印度") rownames(cvd19)=c("6月","7月") barplot(cvd19,main="新冠疫情条形图",beside=TRUE,legend=TRUE,col=c("blue","green"), family='SyHei') #去掉字体 showtext_end();
以下代码会在当前程序目录下生存一个runoob-bar-2.png文件,如下所示:
beside参数
beside设置矩形条堆叠的方式,默认为FALSE:
- beside=FALSE时,条形图的高度是矩阵的数值,矩形条是水平堆叠的。
- beside=TRUE时,条形图的高度是矩阵的数值,矩形条是并列的。
library(showtext); font_add("SyHei","SourceHanSansSC-Bold.otf"); cvd19=matrix( c(83017,83534,1794546,2640626,190535,585493), 2,3 ) #设置文件名,输出为png png(file="runoob-bar-3.png") #加载字体 showtext_begin(); colnames(cvd19)=c("中国","美国","印度") rownames(cvd19)=c("6月","7月") barplot(cvd19,main="新冠疫情条形图",beside=FALSE,legend=TRUE,col=c("blue","green"), family='SyHei') #去掉字体 showtext_end();
以下代码会在当前程序目录下生存一个runoob-bar-3.png文件,如下所示:
以上就是如何用R语言绘制饼图和条形图的详细内容,更多关于R语言绘制饼图和条形图的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。