12

我正在尝试更改为 ggplot 的“背景”颜色。我想要实现的是下图。我已经用geom_ribbon试过了,但我只能定义 ymin 和 ymax。这使我只能创建两个正方形。

到目前为止我使用的代码:

df <- data.frame(x = rnorm(10), y = rnorm(10))

ggplot(df) +
 geom_point(aes(x, y)) +
 geom_ribbon(aes(x = x, ymin = min(y), ymax = 0), fill = "red", alpha = .5) +
 geom_ribbon(aes(x = x, ymin = min(0), ymax = max(y)), fill = "blue", alpha = .5)

这是我想要得到的结果:

ggplot 示例

谢谢你的时间。

4

2 回答 2

10

您的答案的一个变体,如果您希望“背景”颜色一直到图表的边缘,而不仅仅是数据的极端:

ggplot(df) +
  geom_rect(xmin = -Inf, xmax = 0,   ymin = -Inf, ymax = 0,   fill = "red") +
  geom_rect(xmin = 0,    xmax = Inf, ymin = -Inf, ymax = 0,   fill = "blue") +
  geom_rect(xmin = 0,    xmax = Inf, ymin = 0,    ymax = Inf, fill = "green") +
  geom_rect(xmin = -Inf, xmax = 0,   ymin = 0,    ymax = Inf, fill = "yellow") +
  geom_point(aes(x, y), size = 5)

在此处输入图像描述


编辑:透明度

添加alpha=0.5是“工作”,除了使用geom_rect,即使没有引用原始df数据框,也为每行绘制一个矩形df(在这种情况下为 10 次)。设置alpha=0.01表明存在透明度,但在预期水平的十分之一。该方法应该是用矩形进行注释;annotations 仅绘制 geom 的一个实例,而不是原始数据框的每行一个:

ggplot(df) +
  annotate("rect", xmin=-Inf, xmax=0, ymin=-Inf, ymax=0, fill="red", alpha=0.5) +
  annotate("rect", xmin=0, xmax=Inf, ymin=-Inf, ymax=0, fill="blue", alpha=0.5) +
  annotate("rect", xmin=0, xmax=Inf, ymin=0, ymax=Inf, fill="green", alpha=0.5) +
  annotate("rect", xmin=-Inf, xmax=0, ymin=0, ymax=Inf, fill="yellow", alpha=0.5) +
  geom_point(aes(x, y), size=5)

在此处输入图像描述

于 2013-04-09T19:02:34.033 回答
3

在joran的评论之后。答案:

ggplot(df) +
  geom_rect(aes(xmin = min(x), xmax = 0, ymin = min(y), ymax = 0), fill = "red") +
  geom_rect(aes(xmin = min(0), xmax = max(x), ymin = min(y), ymax = 0), fill = "blue") +
  geom_rect(aes(xmin = min(0), xmax = max(x), ymin = 0, ymax = max(y)), fill = "green") +
  geom_rect(aes(xmin = min(x), xmax = 0, ymin = 0, ymax = max(y)), fill = "yellow") +
  geom_point(aes(x, y), size = 5)
于 2013-04-09T14:26:32.510 回答