2009-11-24 41 views
6

我在获取ggplot2的时候遇到了一些麻烦,因为我想要。基本上,我想比较实际的观察值和近似值,并将它们放在一个单独的图中。例如,传说中的问题,同时绘制两个数据的数据。框架

> library(ggplot2) 
> df.actual <- data.frame(x = 1:100, y = (1:100) * 2) 
> df.approx <- data.frame(x = 1:150, y = (1:150) * 2 + 5 + rnorm(150, mean = 3)) 
> ggplot() + geom_point(aes(x, y), data = df.actual) + geom_line(aes(x,y), data = df.approx) 

我的问题是我无法显示图例。我在某处读到ggplot2的传说不太灵活(?)。理想情况下,

  • 标题= '类型'
  • 键一个传说:一个黑色实心点,黑线
  • 密钥标签: '实际', '近似'
  • legend.position = 'topright'

谢谢。

回答

6

试试这个,让你开始

ggplot() + 
    geom_point(aes(x, y, colour = "actual"), data = df.actual) + 
    geom_line(aes(x, y, colour = "approximate"), data = df.approx) + 
    scale_colour_discrete("Type") 
+1

感谢哈德利, 我想区分日期黑白情节。正如我所描述的那样,有可能有一个图例,其中两个键是点和线? – knguyen 2009-11-24 15:05:06

4

这是某种形式的黑客通过网格对象的操作来修改传说:

library("ggplot2") 
df.actual <- data.frame(x=1:100, y=(1:100)*2) 
df.approx <- data.frame(x=1:150, y=(1:150)*2 + 5 + rnorm(150, mean=3)) 
p <- ggplot() + 
    geom_point(aes(x, y, colour="Actual"), data=df.actual) + 
    geom_line(aes(x, y, colour="Approximate"), data=df.approx) + 
    scale_colour_manual(name="Type", 
         values=c("Actual"="black", "Approximate"="black")) 
library("grid") 
grob <- ggplotGrob(p) 
tmp <- grid.ls(getGrob(grob, "key.segments", grep=TRUE, global=TRUE))$name 
grob <- removeGrob(grob, tmp[1]) # remove first line segment in legend key 
tmp <- grid.ls(getGrob(grob, "key.points", grep=TRUE, global=TRUE))$name 
grob <- removeGrob(grob, tmp[2]) # remove second point in legend key 
grid.draw(grob) 

ggplot2 output http://img134.imageshack.us/img134/8427/ggplotlegend.png

+0

感谢您的可重复的例子。 ggplot2应该自动处理这种类型的图例,所以我将它添加到我的待办事项列表中。 – hadley 2009-11-26 03:08:22

相关问题