在ggplot上添加点会使图例弄乱 [英] Adding a point to the ggplot messes up the legend

查看:59
本文介绍了在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

让我们说,附加点将只是数据中的第15

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

g1 <- dat[15,]

我现在可以生成情节

使用

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?

推荐答案

show_guide 将帮助您.在 aes 中定义事物的方式要小心!仅引用实际的变量名(在 aes 中没有 dat ),然后将要设置(而不是映射)的内容移到 aes 调用之外.例如,这也意味着您不必删除 size 的第二个图例.

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)

这篇关于在ggplot上添加点会使图例弄乱的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆