2013-03-12 4 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

+1

в 'scale_color' вы задали имя шкалы' '' ', но оно должно быть одинаковым как для цветных, так и для формных шкал, которые должны быть объединены в один. – baptiste

+0

или я верю, что 'руководства (guide =" none ")' также будут работать? –

ответ

15

У вас есть три эстетики, которые отображаются на Variable: форма, цвет и тип линии. Легенды свертываются вместе, когда у них одинаковые названия и ярлыки. Вы установили заголовок для цвета и присвоили ему пользовательские ярлыки («Значительный Z-Score» и «Moran's I Z-Score»). Вам нужно сделать это для типа линии и формы, чтобы заставить их рухнуть все вместе.

Изменить

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

Смежные вопросы