Ggplot2 draws two legends

I almost completed the following chart, but there is one problem with it.

The legend on the chart is drawn twice.

Here are the data:

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 I Z-Score")) + scale_fill_discrete(name="", label=c("Signficant Z-Score", "Moran I Z-Score")) + theme_classic()+ ylim(0,10) + xlab("Time Periods") + ylab("Moran 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()) 

Does anyone know why ggplot2 creates two legends?

+4
source share
1 answer

You have three aesthetics that display on Variable : shape, color, and line type. Legends collapse together when they have the same name and label. You assigned the title an empty value for the color and assigned it custom labels ("Significant Z-Score" and "Moran I Z-Score"). You must do this for the type of line and shape, and also to make them collapse all together.

Edit

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

to

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

and add

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

(You can also get rid of scale_fill_discrete because you are not really using the aesthetics of the fill anywhere.)

This gives enter image description here

+15
source

Source: https://habr.com/ru/post/1468807/


All Articles