经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » R语言 » 查看文章
R语言barplot ,掌握本篇的内容,基本的条形图都可以画了
来源:cnblogs  作者:生信窗  时间:2021/3/1 12:07:41  对本文有异议

本篇主要想复现文章中的一张图,原图来源(Antibiotic resistome and its association with bacterial communities during sewage sludge composting);

首先来分析一下张图,个人认为至少需要两个图层叠加,

1.堆积条形图和x轴,左y轴,堆积条形图的图例是一个图层;

2.点线图和点线图的图例,右y轴是一个图层;

当然,你还可以拆分,比如图例也是单独图层添加,完全没有问题,但是那样就麻烦了,需要考虑布局,绘图区域大小等问题;

我们没有跟文献中的图一模一样,没有仔细阅读文章,不清楚绘图的数据是否在文章中都提供了,自己造数据吧,最终绘图结果如下:

 

 

图的意思呢,每个柱子代表每次模拟考试成绩的分值,用堆积条形图来展示,上方的点线图是代表每次模拟考试数学成绩所占的百分比。

好了,先模拟数据;

  1. mypar <- par(no.readonly = T)# 保存par的默认参数
  2. set.seed(200) #设定随机数
  3. library(RColorBrewer) #加载颜色面板
  4. mycol<- brewer.pal(7,"Set1")#存储颜色
  5. 数学 <- round(runif(7,50,100),3)
  6. 语文 <- round(runif(7,50,100),3)
  7. 英语 <- round(runif(7,10,100),3)
  8. 生物 <- round(runif(7,70,100),3)
  9. 物理 <- round(runif(7,60,100),3)
  10. 地理 <- round(runif(7,80,100),3)
  11. 历史 <- round(runif(7,50,100),3)
  12. myframe <- data.frame(数学,语文,英语,生物,物理,地理,历史)
  13. mymatrix <- t(as.matrix(myframe))
  14. mysum <- apply(mymatrix, 2, sum) #每次模拟总成绩
  15. ratio_shuexue <- mymatrix[1,]/mysum #每次模拟数学所占比例
  16. moni <- c("模拟1","模拟2","模拟3","模拟4","模拟5","模拟6","模拟7")

 

第一个图层:

  1. par(mar=c(5,4,6,5)) #设置绘图区域边界
  2. mybar <- barplot(mymatrix,col=mycol[1:7],space = 0.5,axes = F,names.arg = moni,cex.names = .8,xlim = c(0,11),ylim = c(0,800)) #绘制条形图
  3. par(xpd=T) #确保绘图区域外部能添加元素
  4. legend(1,900,legend = colnames(myframe),fill = mycol[1:7],border = F,ncol = 7,cex=.8,x.intersp = .2,y.intersp = .5,text.font = 1,bty = "n",text.width = .3)#添加图例
  5. axis(side = 2,at = seq(0,800,400),cex.axis=.8,line = -2)#添加左坐标轴

  

 其中par 中mar参数需要个人根据后续要添加的点线图不断尝试(这个在每个人的电脑上展示的图片效果可能不一样,代码可以照搬,但要修改一些布局参数)。

 

添加第二个图层;

  1. par(new=T) #添加新图层
  2. par(mar=c(3.5,4,6,4)) #设置绘图边界
  3. plot(mybar,ratio_shuexue,type="b",axes=F,ann=F,xlim = c(0,11),ylim = c(0,0.18),col='black',lwd=2,pch=19)#添加点线图
  4. axis(side = 4,at = seq(0,0.18,0.02),cex.axis=.8,line = -3)#添加右坐标轴
  5. legend(0.1,0.15,legend = "数学比例",col="black",bty="n",pch=19,x.intersp = .3,lty=1,lwd=2)#添加图例
  6. mtext("分数",side = 2,font = 2,cex=1)#添加坐标轴标题
  7. mtext("百分比",side = 4,font = 2,cex=1)
  8. par(mypar)#恢复默认绘图参数

运行完这部分代码就能得到一开始的那张图了,par参数在rstudio里面设置一次就会一直生效,除非关闭再打开,所以代码最后设置par(mypar),使其恢复到最开始的状态。

好了,本次就到这里。

 

原文链接:http://www.cnblogs.com/shengxinchuang/p/14462595.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号