有没有办法改变ggplot2中第二个y轴的比例限制?

B.M*_*una 1 r ggplot2

例如,假设我有两个不同尺度的变量;

df = data.table::data.table(
  date = seq(from = lubridate::ymd("2010-01-01"), 
             to = lubridate::ymd("2020-01-01"), length = 100),
  var1 = rpois(n = 100, lambda = 84),
  var2 = rpois(n = 100, lambda = 300)
)
Run Code Online (Sandbox Code Playgroud)

如果我决定使用双 y 轴图,请使用代码;

library(ggplot)

df |> 
  ggplot(aes(x = date)) +
  geom_line(aes(y = var1), col = "royalblue") +
  geom_line(aes(y = var2), col = "red") +
  scale_y_continuous(
    name = "var1",
    sec.axis = sec_axis(~., name = "var2")
  ) +
  theme_light()

Run Code Online (Sandbox Code Playgroud)

结果如下;

在此输入图像描述

如何调整第二个 y 轴的限制,例如从 250 开始到 400 结束?这将使线条更加靠近,从而可以更清晰地了解趋势。

Dav*_*ong 6

您可以在绘图时转换数据,然后在调用中撤消转换sec_axis()。在这里,我只是从数据值中减去 200,然后向标签添加 200 以反映更改:

library(ggplot2)
library(data.table)
library(lubridate)
df = data.table(
  date = seq(from = ymd("2010-01-01"), to = ymd("2020-01-01"), length = 100),
  var1 = rpois(n = 100, lambda = 84),
  var2 = rpois(n = 100, lambda = 300)
)

df |> 
  ggplot(aes(x = date)) +
  geom_line(aes(y = var1), col = "royalblue") +
  geom_line(aes(y = var2-200), col = "red") +
  scale_y_continuous(
    name = "var1",
    sec.axis = sec_axis(~.+200, name = "var2")
  ) +
  theme_light()
Run Code Online (Sandbox Code Playgroud)

创建于 2024-01-25,使用reprex v2.0.2