2013-04-09 76 views
8

我想改变成ggplot的背景颜色。我想要实现的是如下所示的情节。我已经试过geom_ribbon但我只能定义ymin和ymax。这使我只能创建两个正方形。用ggplot绘制多个方块

我至今使用的代码:

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

感谢您的时间。

+0

你可能在想'geom_rect'的? – joran 2013-04-09 14:13:50

+0

你是对的!我盯着ggplot的文档页面已经很久了,但我完全错过了这个。 – jeroen81 2013-04-09 14:16:38

回答

6

你的答案变型,如果你想要的“背景”的颜色,一路去到图形的边缘,不仅对数据的极端:

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


编辑:透明度

添加除了使用geom_rect,即使没有参考原始数据帧,也为df(在这种情况下为10次)的每一行绘制了一个矩形的问题,是“工作的”。设置alpha=0.01表明存在透明度,但是在预期水平的十分之一处。该方法应该是用矩形进行注释;注释只画出一个实例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) 

enter image description here

+0

谢谢,这使它看起来更好。 – jeroen81 2013-04-10 07:03:54

+0

任何想法如何使阿尔法透明矩形?只是alpha = .5或fill.alpha = .5不起作用。我也尝试与intrinsic.aes = F但没有这个成功。 – jeroen81 2013-04-10 11:14:34

+0

谢谢!我通过创建一个具有de x和y值的单独df,然后使用aes(fill =“x”)来找到解决方案。但你的解决方案更好。 – jeroen81 2013-04-10 20:03:33

3

从乔兰的评论后。答案:

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)