问题
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