我试图在第二个y轴上显示潮汐高度为geom_area,但到目前为止还没有成功。
以下是我目前拥有的代码/图表:
#Creating pH Time series plots both sites
ggplot(data = RB_EOS,
aes(
x = Time,
y = pH_corrected_average,
color = Site,
group = Site
)) +
geom_line() +
geom_line(aes(y = 7.55 + Tidal_Depth_ft * 0.075),
linetype = "dotdash") +
scale_y_continuous(
name = "pH",
limits = c(7.55, 7.85),
breaks = seq(7.55, 7.85, 0.05),
sec.axis = sec_axis( ~ (. - 7.55) / 0.075,
name = "Tidal Height (ft)",
breaks = seq(0, 4, 1))
) +
geom_point() +
#geom_point(aes(y = 7.55 + Tidal_Depth_ft*0.075)) +
facet_wrap(~ Week, nrow = 3) +
theme_bw(base_size = 13) +
theme(legend.position = "top") +
ggtitle("pH Tidal Trends") +
labs(subtitle = "Summer 2022") +
xlab("Time (PST)") +
ylab("pH") +
scale_x_discrete(guide = guide_axis(angle = 90))
plot for code above
这是我创建的pH值线图(y)随着时间的推移(x),然后我输入了一个第二y轴来显示潮汐高度。我能够显示潮汐高度的一条线(没有点),我把它改成了一个点划线-这样做是为了显示潮汐高度与其各自地点的pH值的对应关系,但我无法将geom_area函数适当地应用于潮汐高度的第二y轴,以显示平滑潮汐面积曲线上潮汐周期的值。
我试了这个代码,什么都没发生:
#Creating pH Time series plots both sites
ggplot(data = RB_EOS,
aes(
x = Time,
color = Site,
group = Site
)) +
geom_line(aes(y = pH_corrected_average)) +
geom_area(aes(y = 7.55 + Tidal_Depth_ft * 0.075)) +
scale_y_continuous(
name = "pH",
limits = c(7.55, 7.85),
breaks = seq(7.55, 7.85, 0.05),
sec.axis = sec_axis( ~ (. - 7.55) / 0.075,
name = "Tidal Height (ft)",
breaks = seq(0, 4, 1))
) +
geom_point(aes(y = pH_corrected_average)) +
#geom_point(aes(y = 7.55 + Tidal_Depth_ft*0.075)) +
facet_wrap(~ Week, nrow = 3) +
theme_bw(base_size = 13) +
theme(legend.position = "top") +
ggtitle("pH Tidal Trends") +
labs(subtitle = "Summer 2022") +
xlab("Time (PST)") +
ylab("pH") +
scale_x_discrete(guide = guide_axis(angle = 90))
2nd plot for code above
正如你所看到的,它没有出来的方式,我的期望,任何帮助表示感谢。谢谢!
1条答案
按热度按时间mccptt671#
由于
scale_y_continuous()
设置的限制,您的区域几何体没有绘制在图上。我敢打赌,如果您注解掉scale_y_continuous(...)
,您将看到绘制的geom_area()
。您可以告诉这是情况,因为OP为区域几何体正确绘制了图例,但只是没有看到它绘制在图上。解决方案是使用
coord_cartesian(...)
而不是scale_y_continuous(...)
。原因是,当您在
scale_y_continuous()
中设置limits=
参数时,它会导致超出这些限制的数据不包括在绘图上绘制的任何内容中。虽然这对于geom_line()
来说很好,但geom_area()
的工作方式略有不同。geom_area()
绘制的区域需要上限(你的线)和下限(y=0)被包括在区域中,否则它不会被绘制。这里有一个例子。问题示例
下面是一个示例plot代码:
给你这个:
如果我们将y轴上的限制设置为大于0,那么“较低”区域geom就会消失。请注意,
ylim(5,50)
实际上只是scale_y_continuous(limits=c(5,50))
的 Package 器:请注意,“上部”区域geom仍然存在(红色区域)。这是因为该区域绘制的所有下限值都高于我们设置的下限
5
。如果我们增加限制,以便排除红色区域中的下限点,则整个geom消失:重要的是,请注意就像OP的情况一样,图例仍然绘制。这是“吸烟枪”,表明
geom_area
命令没有任何错误-它设置了限制。修复
解决这个问题的方法是使用
coord_cartesian(...)
而不是scale_y_continuous(...)
。与ylim()
不同,coord_cartesian()
会改变绘图区域中显示的内容 *,但不会删除任何超出这些限制的点 *。实际上,它们仍然是“绘制”的,但图只是放大到所指出的区域。ylim()
或scale_*_(limits=...)
函数实际上删除了指示限制之外的数据点。因此,当我们执行以下操作时,您仍然可以看到绘制的每个几何体(甚至底部区域几何体的“尖端”):
我很确定这就是OP的问题所在。你可以使用
coord_cartesian(sec_axis=...)
来设置辅助y轴。