Adding a point to the ggplot messes up the legend

£可爱£侵袭症+ 提交于 2019-12-23 22:14:02

问题


I have a data dataframe

dat <- data.frame(cond = rep(c("A", "B"), each=10),
                  xvar = 1:20 + rnorm(20,sd=3),
                  yvar = 1:20 + rnorm(20,sd=3))

I want to scatter-plot it using ggplot2

Lets say the additional point would just be 15th row in the data

g1 <- dat[15,]

I can now generate the plot

using

scat1 <- ggplot(dat, aes(x=dat[,2], y=dat[,3], shape=factor(dat[,1]), size=2.5, 
     colour = factor(dat[,1]))) + geom_point(alpha=1)
#Add point to the plot 
scat1 <- scat1 + geom_point(x=g1[,2],y=g1[,3], 
colour="blue", size=4)   # this adds a blue point 
#here the legend goes awry and color changes to blue
#Add a label for the added point 
scat1 <- scat1 + geom_text(x=g1[,2], y=1+g1[,3], label="Added", col="Black") 
# this adds a label for the blue point
# Format the figure 
scat1 <- scat1 + theme(panel.grid.major = element_blank(),
         panel.grid.minor = element_blank(), 
         axis.text=element_text(size=14), 
         plot.title = element_text(size = rel(2), 
         colour = "black", face="bold"),
         axis.title=element_text(size=16,face="bold"),
         panel.background = element_blank(), 
         axis.line = element_line(colour = "black"),
         legend.text=element_text(size=14), 
         axis.text.x = element_blank(),
         legend.title=element_text(size=14),
         legend.justification = c(1, 1), 
         legend.position = c(0.25,1))
#Add sensible xlabel and ylabel 
scat1 <- scat1 + ylab(colnames(dat)[3]) +  xlab(colnames(dat)[2]) 
scat1 <- scat1 + ggtitle(paste("The variable", colnames(dat)[2], "and", colnames(dat)[3] )) 
#Delete multiple legends and add a suitable title to the legend
scat1 <- scat1 + guides(shape=guide_legend(title="sale year"), size=FALSE, 
          color= guide_legend(title="sale year")) 

However, I want to change the legend to shape and color matching the original color and shape in the image like the one shown below. How can I do that?


回答1:


show_guide will help you with that. Be careful with the way you define things in aes! Only refer to actual variable names (no dat inside aes) and move things that you want to set (not map) outside the aes call. This also means you don't have to remove the second legend for size, for example.

ggplot(dat, aes(x = xvar, y = yvar, shape = cond, 
                         colour = cond), size = 2.5) + 
  geom_point(alpha = 1) +
  geom_point(data = g1, colour = "blue", size = 4, show_guide = FALSE)



来源:https://stackoverflow.com/questions/34000944/adding-a-point-to-the-ggplot-messes-up-the-legend

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!