ggplot 中带有分面的两个 y 轴:永恒的挫败感
Two y-axes in ggplot with faceting: eternal frustration
我正在尝试制作多面图,其中每个 'facet' 都有两个 y 轴和与之对应的两组数据。我在这里读过几乎所有 post 关于双 y 轴争议的文章,但在我的领域,这是一种非常常见的显示数据的方式,我只想让它工作,该死的。
我的数据是这样的:
ShellNum SampNum AccDist d13C d18O Species Age Type Univ
1 290819-1 290819-1 1 137.41 2.37 -0.85 larensis 17.4 Fossil UdN
2 290819-1 290819-1 2 132.41 2.42 -1.22 larensis 17.4 Fossil UdN
3 290819-1 290819-1 3 127.41 2.78 -1.25 larensis 17.4 Fossil UdN
4 290819-1 290819-1 4 120.71 3.05 -1.41 larensis 17.4 Fossil UdN
5 290819-1 290819-1 5 114.01 2.86 -1.47 larensis 17.4 Fossil UdN
6 290819-1 290819-1 6 107.31 2.81 -1.34 larensis 17.4 Fossil UdN
我正在按 ShellNum 分面(它有 25 个不同的值,总共超过 800 行)我想在两个不同的轴上绘制 d18O 和 d13C 值(d18O 在右边,d13C 在左边)。最好我想手动设置轴的限制,但现在我正在尝试在 sec_axis 范围内工作并缩放它。
这是我的代码:
fossils.all <- ggplot(fossils, aes(x = AccDist)) +
geom_point(aes(y = d18O)) +
geom_line(aes(y = d18O)) +
geom_point(aes(y = d13C), color = "blue") +
geom_line(aes(y = d13C), color = "blue") +
scale_y_continuous(limits = c(-3, 0),
sec.axis = sec_axis(~.+2*2, name = "d13C")) +
facet_wrap( ~ ShellNum, ncol = 5)
fossils.all
我收到以下错误:
"geom_path:每组只包含一个观察值。你需要
调整群体审美?
第二个数据系列 (d13C) 现在甚至没有出现在图中。我该怎么办?我要放弃并使用 base R 吗?
请注意,添加辅助轴不会改变数据的映射方式; d13C
中的正数仍将显示在主 y 轴的正数区域(如果您将其限制限制为 c(-3, 0)
,将被隐藏,除非您自己移动这些值。
在这里,我将 d13C
数据向下移动 4,并将辅助轴刻度向上移动 4。
fossils.all <- ggplot(fossils, aes(x = AccDist)) +
geom_point(aes(y = d18O)) +
geom_line(aes(y = d18O)) +
geom_point(aes(y = d13C-4), color = "blue") +
geom_line(aes(y = d13C-4), color = "blue") +
scale_y_continuous(limits = c(-3, 0),
sec.axis = sec_axis(~.+4, name = "d13C")) +
facet_wrap( ~ ShellNum, ncol = 5) +
theme(axis.title.y.right = element_text(color = "blue"),
axis.text.y.right = element_text(color = "blue"))
fossils.all
我正在尝试制作多面图,其中每个 'facet' 都有两个 y 轴和与之对应的两组数据。我在这里读过几乎所有 post 关于双 y 轴争议的文章,但在我的领域,这是一种非常常见的显示数据的方式,我只想让它工作,该死的。
我的数据是这样的:
ShellNum SampNum AccDist d13C d18O Species Age Type Univ
1 290819-1 290819-1 1 137.41 2.37 -0.85 larensis 17.4 Fossil UdN
2 290819-1 290819-1 2 132.41 2.42 -1.22 larensis 17.4 Fossil UdN
3 290819-1 290819-1 3 127.41 2.78 -1.25 larensis 17.4 Fossil UdN
4 290819-1 290819-1 4 120.71 3.05 -1.41 larensis 17.4 Fossil UdN
5 290819-1 290819-1 5 114.01 2.86 -1.47 larensis 17.4 Fossil UdN
6 290819-1 290819-1 6 107.31 2.81 -1.34 larensis 17.4 Fossil UdN
我正在按 ShellNum 分面(它有 25 个不同的值,总共超过 800 行)我想在两个不同的轴上绘制 d18O 和 d13C 值(d18O 在右边,d13C 在左边)。最好我想手动设置轴的限制,但现在我正在尝试在 sec_axis 范围内工作并缩放它。
这是我的代码:
fossils.all <- ggplot(fossils, aes(x = AccDist)) +
geom_point(aes(y = d18O)) +
geom_line(aes(y = d18O)) +
geom_point(aes(y = d13C), color = "blue") +
geom_line(aes(y = d13C), color = "blue") +
scale_y_continuous(limits = c(-3, 0),
sec.axis = sec_axis(~.+2*2, name = "d13C")) +
facet_wrap( ~ ShellNum, ncol = 5)
fossils.all
我收到以下错误: "geom_path:每组只包含一个观察值。你需要 调整群体审美?
第二个数据系列 (d13C) 现在甚至没有出现在图中。我该怎么办?我要放弃并使用 base R 吗?
请注意,添加辅助轴不会改变数据的映射方式; d13C
中的正数仍将显示在主 y 轴的正数区域(如果您将其限制限制为 c(-3, 0)
,将被隐藏,除非您自己移动这些值。
在这里,我将 d13C
数据向下移动 4,并将辅助轴刻度向上移动 4。
fossils.all <- ggplot(fossils, aes(x = AccDist)) +
geom_point(aes(y = d18O)) +
geom_line(aes(y = d18O)) +
geom_point(aes(y = d13C-4), color = "blue") +
geom_line(aes(y = d13C-4), color = "blue") +
scale_y_continuous(limits = c(-3, 0),
sec.axis = sec_axis(~.+4, name = "d13C")) +
facet_wrap( ~ ShellNum, ncol = 5) +
theme(axis.title.y.right = element_text(color = "blue"),
axis.text.y.right = element_text(color = "blue"))
fossils.all