【问题标题】:ggplot with two y-axis in R?ggplot在R中有两个y轴?
【发布时间】:2023-03-18 03:25:01
【问题描述】:

我之前问过这个问题,但有人关闭它表示它有答案。我很困惑如何在两个Y-axis 上获得两个变量plotted。我想plot Level 在left y 轴上和Flow 在right y-axis 上(即辅助轴)。这是我的数据,希望能得到回复。

library(tidyverse)
library(lubridate)

set.seed(1500)

FakeData <- data.frame(Date = seq(as.Date("2020-01-01"), to = as.Date("2020-01-31"), by = "days"),
                       Level = runif(31, 0, 30), Flow = runif(31, 1,10))
ggplot(data = FakeData, aes(x = Date))+
  geom(aes(y = Level))

这是我想看到的图的示例输出

【问题讨论】:

  • 嗨,我现在没有 R 访问权限,但我认为您正在寻找 sec.axis 参数...看看这篇文章 (stackoverflow.com/questions/3099219/…) 我想它会回答你的问题:)
  • 当然你必须为 geom_bar 和 geom_line 使用不同的 aes(或者你打算使用的任何东西)

标签: r ggplot2 tidyverse yaxis


【解决方案1】:

这是一个开始:

FakeData <- data.frame(Date = seq(as.Date("2020-01-01"), to = as.Date("2020-01-31"), by = "days"),
                       Level = runif(31, 0, 30), Flow = runif(31, 1,10))

scale_factor <- 4
   ggplot(data = FakeData, aes(x = Date))+
   geom_col(aes(y = Level), fill="darkgreen") +
   geom_line(aes(y = Flow*scale_factor), color="blue") +
   scale_y_continuous(sec.axis = sec_axis(~ .*1, labels = number_format(scale=1/scale_factor), name="Flow"))

【讨论】:

  • 感谢 @Dave,我们将 Flow 增加了 4 倍——我们可以将其恢复到原来的值吗?我试过scale_y_continuous(sec.axis = sec_axis(~ .* scale_factor/4, name="Flow")) - 没用。
  • @Hydro,对不起,我需要在标签中添加比例因子而不是调整值,请参阅上面的编辑。
  • 感谢@Dave,我想我们正在复制您代码中的一些行。它确实有助于解决我的问题——我现在只需要使用secondary axislimits。有什么建议可以在某些numbers 之间尝试limit seconcary axis 吗?
  • 我尝试使用limits = c(0,10) 给了我一个完全不同的规模。老实说,我不明白sec-axis 公式是如何工作的。
  • ggplot 的设计者在哲学上不喜欢(这里是礼貌的)与第一个不同比例的第二个轴。因此,为什么很难按要求工作。由于第二个是从第一个缩放的,因此您无法设置独立的限制。您可以添加 breaks=scale_factor*seq(0, 10, 2) 之类的内容来控制刻度线和标签的位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多