有没有办法将 geom_ribbon 与 xmin 和 xmax 的值一起使用?

Ada*_*dam 6 r ggplot2

使用 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?

hug*_*lan 1

当我想geom_ribbon自己使用一些东西时,我遇到了这个问题。我不确定ggplot自从你两年多前最初​​问这个问题以来是否已经发生了变化,但是两个图都使用df_xdf_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