使用 geom_ribbon 的标准方法是具有固定的 x 值以及 ymin 和 ymax 的一些值。输入将是像 df_x 这样的数据框:
library(tidyverse)
# This works
df_x <- tibble(
x = c(1, 2),
ymax = c(0.5, 0.8),
ymin = c(0.4, 0.3)
)
ggplot(df_x) +
geom_ribbon(aes(x = x, ymin = ymin, ymax = ymax))
Run Code Online (Sandbox Code Playgroud)
但是,我有一个包含逆的数据集:y 的固定值以及 xmin 和 xmax 的一些值。但是,geom_ribbon 不接受以这种方式呈现的数据。
# This should produce an identical graph
df_y <- tibble(
y = c(0.3, 0.4, 0.5, 0.8),
xmax = c(2, 2, 2, 2),
xmin = c(2, 1, 1, 2)
)
ggplot(df_y) +
geom_ribbon(aes(xmin = xmin, xmax = xmax, y = y))
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以直接绘制 df_y,而不需要对 df_y 进行转换以使其本质上变成 df_x?
当我想geom_ribbon自己使用一些东西时,我遇到了这个问题。我不确定ggplot自从你两年多前最初问这个问题以来是否已经发生了变化,但是两个图都使用df_x并df_y为我产生了相同的输出(除了每个图在轴上缺少一个轴标签,其中提供了*min和*max值)。
library(tidyverse)
# This works
df_x <- tibble(
x = c(1, 2),
ymax = c(0.5, 0.8),
ymin = c(0.4, 0.3)
)
ggplot(df_x) +
geom_ribbon(aes(x = x, ymin = ymin, ymax = ymax))
Run Code Online (Sandbox Code Playgroud)
df_y <- tibble(
y = c(0.3, 0.4, 0.5, 0.8),
xmax = c(2, 2, 2, 2),
xmin = c(2, 1, 1, 2)
)
ggplot(df_y) +
geom_ribbon(aes(xmin = xmin, xmax = xmax, y = y))
Run Code Online (Sandbox Code Playgroud)
我也不同意你的第一个说法
使用 geom_ribbon 的标准方法是具有固定的 x 值以及 ymin 和 ymax 的一些值。
我认为你的意思可能不是“标准方式”,而是“更常见”。帮助页面解释了geom_ribbon根据您提供的映射猜测功能区的方向;根据提供哪个轴*min和*max参数以及哪个轴具有固定值,这可能是显而易见的。或者,您可以包含geom_ribbon(orientation = 'x')orgeom_ribbon(orientation = 'y')如果它没有自动(或正确)假定您想要相对于哪个轴绘制功能区,这可能是有类似问题的人的解决方案。
但是,如果您尝试将其强制到错误的方向,则会出现错误;在上面使用的示例中df_y,如果您提供orientation = 'x',您将得到Error: Either ymin or ymax must be given as an aesthetic。