前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言中的绘图神器plotrix

R语言中的绘图神器plotrix

作者头像
一粒沙
发布2022-03-14 14:51:12
1.9K0
发布2022-03-14 14:51:12
举报
文章被收录于专栏:R语言交流中心R语言交流中心

大家在绘制科研图形的时候总会遇到各种想完美展示但是有各种受限的局面。最后都不得不去妥协,退而求其次。今天就来给大家介绍个神器,为各位去除后顾之忧。首先看下包的安装:

代码语言:javascript
复制
install.packages("plotrix")

我们先来看下这个包中一些基础的绘图功能:

1. 坐标分割绘制

代码语言:javascript
复制
###基础绘制
twogrp<-c(rnorm(5)+4,rnorm(5)+20,rnorm(5)+5,rnorm(5)+22)
gpcol<-c(2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5)
gap.plot(twogrp,gap=c(8,16),xlab="Index",ylab="Group values",main="Gap on Y axis",col=gpcol)
代码语言:javascript
复制
###设置断开的坐标轴,gap.axis="x"
gap.plot(twogrp,rnorm(20),gap=c(8,16),gap.axis="x",xlab="X values",xtics=c(4,7,17,20),ylab="Y values", main="Gap on X axis with added lines")
代码语言:javascript
复制
###添加线
gap.plot(c(seq(3.5,7.5,by=0.5),seq(16.5,22.5,by=0.5)),rnorm(22),gap=c(8,16),gap.axis="x",type="l",add=TRUE,col=2)
代码语言:javascript
复制
###分割柱状图
gap.barplot(twogrp,gap=c(8,16),xlab="Index",ytics=c(3,6,17,20),ylab="Group values",main="Barplot with gap")
代码语言:javascript
复制
###水平翻转柱状图
gap.barplot(twogrp,gap=c(8,16),xlab="Index",ytics=c(3,6,17,20), ylab="Group values",horiz=TRUE, main="Horizontal barplot with gap")
代码语言:javascript
复制
###分割箱线图
twovec<-list(vec1=c(rnorm(30),-6),vec2=c(sample(1:10,40,TRUE),20))
gap.boxplot(twovec,gap=list(top=c(12,18),bottom=c(-5,-3)),main="Show outliers separately")

2. 密度曲线绘制

填充的密度曲线

代码语言:javascript
复制
x1<-c(sample(20:50,20),sample(40:80,30))
x2<-c(sample(10:40,30),sample(50:90,30))
x3<-sample(20:90,50)
xdens1<-density(x1)
xdens2<-density(x2)
xdens3<-density(x3)
xlist<-list(first=xdens1,second=xdens2,third=xdens3)
joyPlot(xlist,main="joyPlot with polygons",xlab="Position",fill=c("#ffcccc","#ccffcc","#ccccff"), xlim=c(0,100))

3. 极坐标图的绘制

代码语言:javascript
复制
##polar plot
testlen<-c(rnorm(36)*2+5)
testpos<-seq(0,350,by=10)
polar.plot(testlen,testpos,main="Test Polar Plot",lwd=3,line.col=4)
代码语言:javascript
复制
####曲线和更换标签
testlen<-c(sin(seq(0,1.98*pi,length=100))+2+rnorm(100)/10)
testpos<-seq(0,1.98*pi,length=100)
radial.plot(testlen,testpos,rp.type="p",main="Test Polygon",line.col="blue",labels=LETTERS[1:8], label.pos=seq(0,14*pi/8,length.out=8))
代码语言:javascript
复制
###扇形
pie4<-list(sort(sample(1:60,8)))
radial.pie(pie4,labels=1:36)
代码语言:javascript
复制
###添加任意角度文本
radialtext("uncooked spaghetti", center=c(3,3),col="blue")
radialtext("uncooked spaghetti", center=c(3,3),start=1.2, angle=pi/4, cex=0.8)

4. 阶梯柱状图的绘制

代码语言:javascript
复制
### staircase plot
sample_size<-c(500,-72,428,-94,334,-45,289)
totals<-c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE)
labels<-c("Contact list","Uncontactable","","Declined","","Ineligible","Final sample")
staircasePlot(sample_size,totals,labels,main="Acquisition of the sample (staircasePlot)",total.col="gray", inc.col=2:4,bg.col="#eeeebb",direction="s")

5. 三角形坐标系绘制

代码语言:javascript
复制
### Triangle plot
data(soils)
triax.plot(soils[1:6,],main="GRID AND LEGEND",show.grid=TRUE,show.legend=TRUE,col.symbols=1:6, pch=4)

6. 双坐标系绘制

代码语言:javascript
复制
### two ordinates
xval1 <- seq.Date(as.Date("2017-01-02"),as.Date("2017-01-10"), by="day")
xval2 <- seq.Date(as.Date("2017-01-01"),as.Date("2017-01-15"), by="day")
going_up<-seq(3,7,by=0.5)+rnorm(9)
going_down<-rev(60:74)+rnorm(15)
twoord.plot(2:10,going_up,1:15,going_down,xlab="Sequence",ylab="Ascending values",rylab="Descending values",lcol=4, main="Plot with two ordinates - points and lines",do.first="plot_bg();grid(col=\"white\",lty=1)")
代码语言:javascript
复制
###分开展示
twoord.plot(2:10,going_up,1:15,going_down,xlab="Sequence",
  lylim=range(going_up)+c(-1,10),rylim=range(going_down)+c(-10,2),
  ylab="Ascending values",ylab.at=5,rylab="Descending values",
  rylab.at=65,lcol=4,main="Plot with two ordinates - separated lines",
  lytickpos=3:7,rytickpos=seq(55,75,by=5),
  do.first="plot_bg();grid(col=\"white\",lty=1)")
代码语言:javascript
复制
##不同的展示形式
twoord.plot(2:10,going_up,1:15,going_down,xlab="Sequence",
  lylim=range(going_up)+c(-1,10),rylim=range(going_down)+c(-10,2),
  type=c("bar","l"),ylab="Ascending values",ylab.at=5,
  rylab="Descending values",rylab.at=65,
  main="Bars on left axis, lines on right axis",
  lytickpos=3:7,rytickpos=seq(55,75,by=5),
  lcol=3,rcol=4,do.first="plot_bg()")
代码语言:javascript
复制
###复杂展示
time <- 0:25
A <- 1+1/2*sin(time/2)
B <- A + rnorm(length(A), sd=1/10)
B <- B + rnorm(length(A), sd=1/10)
sizeA <- floor(450*(1 + 1/4*sin(time/2+2))*(1+.1))
sizeB <- 1000-sizeA
C <- (A*sizeA + B*sizeB)/(sizeA+sizeB)
#typical usage
twoord.stackplot(lx=time, rx=time, ldata=cbind(sizeA, sizeB),
       rdata=cbind(A, B, C),  lcol=c("grey80", "white"),
       rcol=c("blue", "red","black"), ltype="bar", rtype=c("l","p","o"),
       border="grey80", lylab="Size", rylab="A,B,C", xlab="Time",
       main="a plot", incrylim=2/100)

7. 小提琴图的绘制

代码语言:javascript
复制
### plotting with different colors and with at specified
 violin_plot(matrix(c(normvar,unifvar),ncol=2),at=1:3,
  main="Different colors and extra space",
  x_axis_labels=c("Normal","Uniform","Normal"),
  show_outliers=TRUE,col=c("blue","red"),median_col="lightgray",
  pch=6)


 ### adding a violin to existing plot
 violin_plot(normvar2,at=3,add=TRUE,col="green",violin_width=1)
代码语言:javascript
复制
### Engelmann-Hecker-Plot - EH-Plot
data(iris)
ehplot(iris$Petal.Length, iris$Species, offset=0.06, pch=as.numeric(iris$Species)

8. 局部放大图形绘制(此处灵活性待扩展)

代码语言:javascript
复制
zoomInPlot(rnorm(100),rnorm(100),rxlim=c(-1,1),rylim=c(-1,1), zoomtitle="Zoom In Plot",titlepos=-1.5)

9. 带表格的柱状图

代码语言:javascript
复制
testdf <- data.frame(Before = c(10, 7, 5, 9), During = c(8, 6, 2, 5),
  After = c(5, 3, 4, 3))
 rownames(testdf) <- c("Red", "Green", "Blue", "Lightblue")
 barp(testdf, main = "Test addtable2plot", ylab = "Value",
  names.arg = colnames(testdf), col = 2:5)
 # show most of the options including the christmas tree colors
 abg <- matrix(c(2, 3, 5, 6, 7, 8), nrow=4, ncol=3)
 addtable2plot(2, 8, testdf, bty = "o", display.rownames = TRUE, hlines = TRUE,
  vlines = TRUE, title = "The table", bg = abg)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言交流中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档