用ggplot绘制多个正方形

时间:2013-04-09 13:54:58

标签: r ggplot2

我正在尝试更改为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 example http://i50.tinypic.com/25j8p5z.png

感谢您的时间。

2 个答案:

答案 0 :(得分:8)

答案的一个变体,如果你想让“背景”颜色一直到图形的边缘,而不仅仅是数据的极端:

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)

enter image description here


编辑:透明度

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

alpha=0.01

enter image description here

答案 1 :(得分: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)