如何手动添加图例到ggplot

how to add manually a legend to ggplot

我想在 r 中为 ggplot 手动添加图例。我的代码的问题是它没有显示正确的符号(蓝点、蓝色虚线和红色实线)。这里是代码和情节。

predict_ID1.4.5.6.7 <- predict(lm_mRNATime, ID1.4.5.6.7)
ID1.4.5.6.7$predicted_mRNA <- predict_ID1.4.5.6.7
colors <- c("data" = "Blue", "predicted_mRNA" = "red","fit"="Blue")
ggplot( data = ID1.4.5.6.7, aes(x=Time,y=mRNA,color="data")) +
  geom_point()+
  scale_x_discrete(limits=c('0','20','40','60','120'))+
  labs(title="ID-1,ID-4,ID-5,ID-6,ID-7",y="mRNA", x="Time [min]", color = "Legend") +
  scale_color_manual(values = colors)+
  geom_line(aes(x=Time,y=predicted_mRNA,color="predicted_mRNA"),lwd=1.3)+
  geom_smooth(method = "lm",aes(color="fit",lty=2),se=TRUE,lty=2)+
  scale_color_manual(values = colors)+
theme(plot.title = element_text(hjust = 0.5),plot.subtitle = element_text(hjust = 0.5)) 

如何修改代码以获取与图例中的图关联的符号?

这里最困难的部分是为演示目的重新创建数据集。添加一个可重现的例子总是更好。无论如何,以下内容应该很接近:

library(ggplot2)

set.seed(123)

ID1.4.5.6.7 <- data.frame(Time = c(rep(1, 3), 
                                   rep(c(2, 3, 4, 5), each = 17)),
                          mRNA = c(rnorm(3, 0.1, 0.25), 
                                   rnorm(17, 0, 0.25),
                                   rnorm(17, -0.04, 0.25), 
                                   rnorm(17, -0.08, 0.25),
                                   rnorm(17, -0.12, 0.25)))

lm_mRNATime <- lm(mRNA ~ Time, data = ID1.4.5.6.7)

现在我们 运行 您的代码添加了自定义颜色指南:

predict_ID1.4.5.6.7 <- predict(lm_mRNATime, ID1.4.5.6.7)
ID1.4.5.6.7$predicted_mRNA <- predict_ID1.4.5.6.7

colors <- c("data" = "Blue", "predicted_mRNA" = "red", "fit" = "Blue")

p <-  ggplot( data = ID1.4.5.6.7, aes(x = Time, y = mRNA, color = "data")) +
        geom_point() +
        geom_line(aes(x = Time, y = predicted_mRNA, color = "predicted_mRNA"), 
                  lwd = 1.3) +
        geom_smooth(method = "lm", aes(color = "fit", lty = 2), 
                    se = TRUE, lty = 2) +
        scale_x_discrete(limits = c('0', '20', '40', '60', '120')) +
        scale_color_manual(values = colors) +
        labs(title = "ID-1, ID-4, ID-5, ID-6, ID-7", 
             y = "mRNA", x = "Time [min]", color = "Legend") +
        guides(color = guide_legend(
                       override.aes = list(shape = c(16, NA, NA), 
                                           linetype = c(NA, 2, 1)))) +
        theme(plot.title    = element_text(hjust = 0.5), 
              plot.subtitle = element_text(hjust = 0.5),
              legend.key.width = unit(30, "points"))