2015-11-30 3 views
1

У меня есть dataframe данныхДобавление точки к ggplot путает легенды

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

Я хочу, чтобы рассеять-диаграмму, используя ggplot2

Допустим, дополнительная точка будет просто 15th строка в данные

g1 <- dat[15,] 

теперь я могу генерировать сюжет enter image description here

использование

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")) 

Однако, я хочу, чтобы изменить легенду формы и цвета, соответствующую первоначальный цвет и форму в изображении, как показано ниже. Как я могу это сделать? enter image description here

ответ

2

show_guide поможет вам в этом. Будьте осторожны с тем, как вы определяете вещи в aes! Только ссылайтесь на имена фактических переменных (нет dat внутри aes) и переместите то, что вы хотите установить (а не карту) за пределами вызова aes. Это также означает, что вам не нужно, например, удалить вторую легенду для size.

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) 

enter image description here

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