R语言绘制双坐标轴(5种方法全网最全)

本文分别使用base、plotly、ggplot2、lattice4个系统,5种方法绘制双坐标轴。

本文是付费文章,不愿意阅读也没有关系,明天将本文章免费放出

这次为免费版本,内容是完全一样的

哈德利说了,两个坐标轴容易误导,他们不做(其实做了)

其实解决方法有很多, 接下来分系统说

 

part 1使用R的base画图系统

使用的数据就是R内置的数据。其中beaver1的长度为114, beaver2长度为100。所以都选择100.


#使用R的内置数据集
beaver1
beaver2

# 看看数据集的长度
length(beaver1[, 3]); length(beaver2[, 3])

# 上面的长度不是一样长,因此选择长度为100.
plot(beaver1[1:100, 3], type = 'l', ylab = "beaver1 temperature")
par(new = TRUE)
plot(beaver2[,3], type = "l")
# 上面y有两个标签, 不好看

出来的结果如下:上面的par(new=TRUE)意思是在原来的图形上再加一个图形。

R语言绘制双坐标轴(5种方法全网最全)_第1张图片

上面有问题,左边的y标签和y的刻度都是有两个,作为华东胡歌,深深的感觉很丑。那么修改一下。


# updated plot
plot(beaver1[1:100, 3], type ="l", ylab = "beaver1 temperature")
par(new = TRUE)
plot(beaver2[,3], type = "l", xaxt = "n", yaxt = "n",
     ylab = "", xlab = "")
axis(side = 4)

上面依然使用par(new=TRUE)表示可以继续在原来图上加图形。但是这个时候,在第四行有几个参数:xaxt和yaxt决定是否画坐标轴的刻度线和刻度线标签。xaxt = ‘n’时,不画坐标轴x的刻度线和刻度线标签;yaxt = ‘n’时,不画坐标轴y的刻度线和刻度线标签。ylab和xlab是关闭y的标签。第六行axis是用来添加坐标轴的,side为4是添加到右边。出来效果如下:

R语言绘制双坐标轴(5种方法全网最全)_第2张图片

但是上面的图依然不好看。再来优化一下,加上颜色,加上图例。


# final plot
par(mar = c(5, 5, 3, 5))
plot(beaver1[1:100, 3], type ="l", ylab = "beaver1 temperature",
     main = "Beaver Temperature Plot", xlab = "Time",
     col = "blue")
par(new = TRUE)
plot(beaver2[,3], type = "l", xaxt = "n", yaxt = "n",
     ylab = "", xlab = "", col = "red", lty = 2)
axis(side = 4)
mtext("beaver2 temperature", side = 4, line = 3)

legend("topleft", c("beaver1", "beaver2"),
       col = c("blue", "red"), lty = c(1, 2))

这里的代码和上面的其实差不多,就是更改了线形和线的形状。第10行代码的mtext是代表给某个轴添加文本

R语言绘制双坐标轴(5种方法全网最全)_第3张图片

最终出来的图如下:

R语言绘制双坐标轴(5种方法全网最全)_第4张图片

这里已经基本上可以了。

 

参考链接:

https://thepracticalr.wordpress.com/2016/08/30/2-y-axis-plotting/

http://xukuang.github.io/blog/2015/05/contolling-axes-of-R-plots/

https://www.r-bloggers.com/r-single-plot-with-two-different-y-axes/

part 2 调用现成的包使用plotrix包

这里有很多案例,这个包画出来的东西还可,但是感觉像是使用的R的base系统。


library(plotrix)
example(twoord.plot)

R语言绘制双坐标轴(5种方法全网最全)_第5张图片

参考链接:

https://stackoverflow.com/questions/6142944/how-can-i-plot-with-2-different-y-axes

 

part 3 使用plotly包

plotly已经是我们的老朋友了

library(plotly)
ay <- list(
  tickfont = list(color = "red"),
  overlaying = "y",
  side = "right",
  title = "second y axis"
)
fig <- plot_ly()
fig <- fig %>% add_lines(x = ~1:3, y = ~10*(1:3), name = "slope of 10")
fig <- fig %>% add_lines(x = ~2:4, y = ~1:3, name = "slope of 1", yaxis = "y2")
fig <- fig %>% layout(
  title = "Double Y Axis", yaxis2 = ay,
  xaxis = list(title="x")
)

fig

R语言绘制双坐标轴(5种方法全网最全)_第6张图片

参考链接:

https://plotly.com/r/multiple-axes/

 

part 4 ggplot2版本的(虽然哈德利不写,但是有人写)

R语言绘制双坐标轴(5种方法全网最全)_第7张图片

其实好像这个添加第二个坐标轴也是在ggplot2中存在的。有人已经写了详细的教程,所以说别再说哈德利不写双坐标轴了。下面的链接写的非常详细,大家移步:

https://www.r-graph-gallery.com/line-chart-dual-Y-axis-ggplot2.html

 

part 5难道R画图系统只有上面吗,lattice一点差

R语言绘制双坐标轴(5种方法全网最全)_第8张图片

教程写的非常详细。大家移步:https://www.r-graph-gallery.com/145-two-different-y-axis-on-the-same-plot.html

 

另外本文已经加入我的专辑里面,点击阅读原文阅读更多文章:

欢迎关注我的公众号阅读更多内容,关于R可视化问题

 

你可能感兴趣的:(ggplot2,R,R,ggplot2,数据可视化)