2013-03-12 155 views
4

我已经几乎完成了下面的图表,但是它有一个问题。ggplot2绘制了两个图例

图中的图例绘制两次。

下面是数据:

structure(list(Period = c("January 1997 - August 2003", "September 2003 - Jun 2005", 
"Jul 2005 - Dec 2009", "January 1997 - August 2003", "September 2003 - Jun 2005", 
"Jul 2005 - Dec 2009"), Time.Period = structure(c(1L, 3L, 2L, 
1L, 3L, 2L), .Label = c("Jan 1997 - Aug 2003", "Jul 2005 - Dec 2009", 
"Sep 2003 - Jun 2005"), class = "factor"), Variable = structure(c(2L, 
2L, 2L, 1L, 1L, 1L), .Label = c("Significant", "Zscore"), class = "factor"), 
Score = c(8.798129, 4.267268, 7.280275, 1.64, 1.64, 1.64)), .Names = c("Period", 
"Time.Period", "Variable", "Score"), class = "data.frame", row.names = c(NA, 
-6L)) 

ggplot(glomor, aes(x=Time.Period, y=Score, group=Variable, shape=Variable, color=Variable)) + 
geom_point() + 
guides(fill=FALSE) + 
scale_x_discrete(limits=c("Jan 1997 - Aug 2003","Sep 2003 - Jun 2005","Jul 2005 - Dec 2009"), expand=c(.08,0)) + 
    geom_line(aes(linetype=Variable), size=1.5) + 
    geom_point(size=4.2) + 
    scale_linetype_manual(values=c(1,3)) + 
    scale_color_manual(values=c("black", "grey40"), name="", labels=c("Signficant Z-Score", "Moran's I Z-Score")) + 
    scale_fill_discrete(name="", label=c("Signficant Z-Score", "Moran's I Z-Score")) + 
    theme_classic()+ 
    ylim(0,10) + 
    xlab("Time Periods") + 
    ylab("Moran's I Z-Score") + 
    theme(axis.title.x=element_text(size=14)) + 
    theme(axis.title.y=element_text(size=14)) + 
    theme(legend.position=c(.75, .85)) + 
    theme(legend.background = element_rect(fill="white")) + 
    theme(legend.key = element_blank()) 

有谁知道,为什么GGPLOT2产生两个传说?

+0

请使用'dput(your_data)'并粘贴输出。 – Arun 2013-03-12 19:36:36

+1

在'scale_color'中您将缩放名称设置为'“”'',但对于要合并为一个颜色和形状比例的颜色和形状比例,它必须相同。 – baptiste 2013-03-12 19:40:12

+0

或者我相信'guide(guide =“none”)'也会起作用吗? – 2013-03-12 19:59:26

回答

15

您有三种美学被映射到Variable:形状,颜色和线型。当他们拥有相同的标题和标签时,图例一起折叠。您已将标题设置为空白,并为其指定了自定义标签(“重要Z分数”和“Moran's I Z分数”)。您需要为线型和形状做到这一点,以使它们一起折叠。

变化

scale_linetype_manual(values=c(1,3)) + 

scale_linetype_manual(values=c(1,3), name="", labels=c("Signficant Z-Score", "Moran's I Z-Score")) + 

,并添加

scale_shape_discrete(name="", label=c("Signficant Z-Score", "Moran's I Z-Score")) + 

(你也可以摆脱scale_fill_discrete的,因为你没有实际使用的填充审美的任何地方。 )

这给出 enter image description here

+0

非常感谢。现在看到了答案,这真的很直观有道理。 – user1738753 2013-03-13 01:55:01