如何在 ggplot2 中正确设置第二个 y 尺度的范围?
How to properly set a range for second y-scale in ggplot2?
我在 scale_y_continuous
中发现了几个包含 sec.axis
的讨论帖。我看到很多公式来转换第二个尺度。但我不需要 trans=~./50
或 trans=~.+50
。我宁愿设置一个手动范围。我看不出为什么我应该通过公式将第二个量表与第一个量表联系起来。它独立于它。
# data generation
x = seq(1:20)
y1 = runif(20, 5, 50000)
y2 = rnorm(20)
df1 = data.frame(x, y1)
df2 = data.frame(x, y2)
ggplot(data=df1, aes(x, y=y1, col="red")) +
geom_line() +
geom_point(data=df2, aes(x, y=y2, col="blue")) +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10), sec.axis = sec_axis(trans=~., name="y2")) +
theme(legend.position="none")
当我 运行 一个单点命令时,它会给出 "natural" 比例尺。
ggplot() +
geom_point(data=df2, aes(x, y=y2))
如何从第二张图片中获取正常的 y 比例作为第一张图右侧的第二个 y 比例?
见解:没有办法不关联两个 y 轴。
ggplot(data=df1, aes(x, y=y1, col="red")) +
geom_line() +
geom_point(data=df2, aes(x, y=y2, col="blue")) +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10), sec.axis = sec_axis(trans=~./50000, name="y2")) +
theme(legend.position="none")
仍然:为什么数据点没有与转换后的第二个 y 轴对齐?
我认为你还需要解决:
ggplot(data=df1, aes(x, y=y1, col="red")) +
geom_line() +
geom_point(data=df2, aes(x, y=(2.5+y2)*8000, col="blue")) +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10),
sec.axis = sec_axis(trans=~(./8000 - 2.5), name="y2")) +
theme(legend.position="none")
我在 scale_y_continuous
中发现了几个包含 sec.axis
的讨论帖。我看到很多公式来转换第二个尺度。但我不需要 trans=~./50
或 trans=~.+50
。我宁愿设置一个手动范围。我看不出为什么我应该通过公式将第二个量表与第一个量表联系起来。它独立于它。
# data generation
x = seq(1:20)
y1 = runif(20, 5, 50000)
y2 = rnorm(20)
df1 = data.frame(x, y1)
df2 = data.frame(x, y2)
ggplot(data=df1, aes(x, y=y1, col="red")) +
geom_line() +
geom_point(data=df2, aes(x, y=y2, col="blue")) +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10), sec.axis = sec_axis(trans=~., name="y2")) +
theme(legend.position="none")
当我 运行 一个单点命令时,它会给出 "natural" 比例尺。
ggplot() +
geom_point(data=df2, aes(x, y=y2))
如何从第二张图片中获取正常的 y 比例作为第一张图右侧的第二个 y 比例?
见解:没有办法不关联两个 y 轴。
ggplot(data=df1, aes(x, y=y1, col="red")) +
geom_line() +
geom_point(data=df2, aes(x, y=y2, col="blue")) +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10), sec.axis = sec_axis(trans=~./50000, name="y2")) +
theme(legend.position="none")
仍然:为什么数据点没有与转换后的第二个 y 轴对齐?
我认为你还需要解决:
ggplot(data=df1, aes(x, y=y1, col="red")) +
geom_line() +
geom_point(data=df2, aes(x, y=(2.5+y2)*8000, col="blue")) +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10),
sec.axis = sec_axis(trans=~(./8000 - 2.5), name="y2")) +
theme(legend.position="none")