2012-03-28 46 views
4

我正在ggplot2中绘制一个由一组绘制为点的数据点组成的图形,其中由拟合模型预测的线条覆盖。图表的总体思路看起来是这样的:如何在ggplot2中使用一个点条目和一个行条目创建图例?

names <- c(1,1,1,2,2,2,3,3,3) 
xvals <- c(1:9) 
yvals <- c(1,2,3,10,11,12,15,16,17) 
pvals <- c(1.1,2.1,3.1,11,12,13,14,15,16) 
ex_data <- data.frame(names,xvals,yvals,pvals) 
ex_data$names <- factor(ex_data$names) 

graph <- ggplot(data=ex_data, aes(x=xvals, y=yvals, color=names)) 
print(graph + geom_point() + geom_line(aes(x=xvals, y=pvals))) 

正如你可以看到,无论是线条和点由分类变量(在这种情况下,“名”)着色。我希望图例包含2个条目:一个标记为'数据'的点和一条标记为'拟合'的线条(以表示点是实际数据,线是拟合的)。但是,我似乎无法得到这个工作。该(真棒)引导here是伟大的格式,但不处理实际的项目,而我已经试过了技术here无果,即

print(graph + scale_colour_manual("", values=c("green", "blue", "red")) 
+ scale_shape_manual("", values=c(19,NA,NA)) 
+ scale_linetype_manual("",values=c(0,1,1))) 

的主要问题是,在我的实际数据,“名称”有200多个不同的类别,而我只想要上面在图例中提到的2个条目。这样做与我的实际数据只是产生了一个没有意义的图例,因为图例试图成为颜色的关键(我的方法太多了)。

我很感激任何帮助!

回答

4

我认为这是接近你想要什么:

ggplot(ex_data, aes(x=xvals, group=names)) + 
    geom_point(aes(y=yvals, shape='data', linetype='data')) + 
    geom_line(aes(y=pvals, shape='fitted', linetype='fitted')) + 
    scale_shape_manual('', values=c(19, NA)) + 
    scale_linetype_manual('', values=c(0, 1)) 

的想法是,你指定两个美学(linetypeshape)两条线路,并指出,尽管它是没有意义的,也就是说,对于一个点有一个linetype审美。然后,使用手动缩放比例手动将这些“无意义”美学图映射到“空”值(在这种情况下为NA0)。

+0

谢谢!我明白了现在的工作方式。结合[this](http://stackoverflow.com/questions/5423105/how-to-remove-an-aesthetic-from-a-ggplot2-legend)来抑制颜色的图例,它的效果非常好! 编辑:如果其他人正在尝试这样做,我指的是链接的帖子中的评论,你通过美学来压制图例 - scale_color_something(...,guide ='none') - 显然legend = F已被弃用。 – blake 2012-03-29 14:04:27

1

这已被回答,但根据反馈我得到了另一个问题(How can I fix this strange behavior of legend in ggplot2?)这个调整可能会有助于他人,并可能为您节省头痛(对不起,不能作为对以前的答案评论):

ggplot(ex_data, aes(x=xvals, group=names)) + 
    geom_point(aes(y=yvals, shape='data', linetype='data')) + 
    geom_line(aes(y=pvals, shape='fitted', linetype='fitted')) + 
    scale_shape_manual('', values=c('data'=19, 'fitted'=NA)) + 
    scale_linetype_manual('', values=c('data'=0, 'fitted'=1)) 
相关问题