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

20 篇文章 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)意思是在原来的图形上再加一个图形。

上面有问题,左边的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是添加到右边。出来效果如下:

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


# 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是代表给某个轴添加文本

最终出来的图如下:

这里已经基本上可以了。

 

参考链接:

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)

参考链接:

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

参考链接:

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

 

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

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

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

 

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

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

 

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

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

 

  • 35
    点赞
  • 145
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
可以使用Plotly库来绘制具有坐标轴的图形。下面是一个示例代码,展示了如何使用Plotly绘制坐标轴图: ```python import plotly.graph_objects as go # 创建数据 x = [1, 2, 3, 4, 5] y1 = [10, 15, 7, 12, 9] y2 = [50, 30, 40, 20, 25] # 创建第一个坐标轴 fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=y1, name='y1', line=dict(color='blue'))) # 创建第二个坐标轴 fig.add_trace(go.Scatter(x=x, y=y2, name='y2', line=dict(color='red'), yaxis='y2')) # 设置图形布局 fig.update_layout( yaxis=dict(title='y1', titlefont=dict(color='blue'), tickfont=dict(color='blue')), yaxis2=dict(title='y2', titlefont=dict(color='red'), tickfont=dict(color='red'), overlaying='y', side='right'), xaxis=dict(title='x') ) # 显示图形 fig.show() ``` 在上面的示例代码中,首先创建了x、y1和y2的数据。然后使用`go.Figure()`创建一个新的图形对象,使用`add_trace()`方法分别添加两个散点图,分别对应y1和y2的数据。在添加第二个散点图时,通过`yaxis='y2'`参数指定其使用第二个坐标轴。 接下来,使用`update_layout()`方法设置图形的布局。通过`yaxis`参数设置第一个坐标轴的标题和颜色,通过`yaxis2`参数设置第二个坐标轴的标题、颜色、叠加在第一个坐标轴上、并位于右侧。通过`xaxis`参数设置x轴的标题。 最后,使用`fig.show()`显示图形。 运行上述代码,将会得到一个带有坐标轴的图形,其中y1使用蓝色线条表示,y2使用红色线条表示。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuanzhoulvpi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值