R ggplot为什么添加新元素会覆盖循环内的颜色而不覆盖循环外的颜色

R ggplot为什么添加新元素会覆盖循环内的颜色而不覆盖循环外的颜色,r,loops,ggplot2,R,Loops,Ggplot2,我正在写一个函数来绘制n系列数据。我的想法是在每个系列中循环,并为每个循环添加一个新的gg_平滑。当我用手“循环”时,它就起作用了,但将它插入实际的循环中会覆盖颜色的感觉 我正在处理的数据,其想法是能够有n个列: 使用以下几行,我得到了期望的结果: gene_list <- c("tetA", "tet.W.") gg <- ggplot() gg <- gg + geom_smooth(data=df_analysis_summed, aes

我正在写一个函数来绘制n系列数据。我的想法是在每个系列中循环,并为每个循环添加一个新的gg_平滑。当我用手“循环”时,它就起作用了,但将它插入实际的循环中会覆盖颜色的感觉

我正在处理的数据,其想法是能够有n个列:

使用以下几行,我得到了期望的结果:

gene_list <- c("tetA", "tet.W.")
gg <- ggplot()

gg <- gg + geom_smooth(data=df_analysis_summed, 
              aes(x=as.Date(dato), y=!!sym(gene_list[1]), linetype = oua_2, colour = gene_list[1] ),
              method="auto", se=F)

gg <- gg + geom_smooth(data=df_analysis_summed, 
              aes(x=as.Date(dato), y=!!sym(gene_list[2]), linetype = oua_2, colour = gene_list[2] ),
              method="auto", se=F)

gg + labs(colour = "gene")


gene_list而不是尝试在绘图上逐个添加多行。Ggplot2最适合处理长格式的数据。在这种情况下,数据是旋转的,因此一列表示基因类型,一列表示相应的值

#create some data
set.seed(1)
dato<-seq.Date(as.Date("2018-04-25"), length.out = 14, by="1 day")
oua_2<-rep(c(0, 1), 7)
tetA<-rnorm(14, 0.04, 0.02)
tet.W<-rnorm(14, 0.2, 0.02)

df_analysis_summed <- data.frame(dato, oua_2, tetA, tet.W)

#convert the data frame to long
library(tidyr)
df_analysis_long <- df_analysis_summed %>% pivot_longer(starts_with("tet"), names_to = "genes", values_to = "value")

#function to plot
plot_genes_scat_smooth_long <- function (df) {
  plot <- ggplot()
  plot <- plot +
    geom_smooth(data=df_analysis_long, aes(x=as.Date(dato), y=value, linetype=as.factor(oua_2), colour = genes), method="auto", se=F)

  plot
}

plot_genes_scat_smooth_long(df_analysis_long)
#创建一些数据
种子(1)

datoHey我之前也有类似的问题。你可以查一下。也许这些答案中有一个对你有帮助。我想功能是一样的
#create some data
set.seed(1)
dato<-seq.Date(as.Date("2018-04-25"), length.out = 14, by="1 day")
oua_2<-rep(c(0, 1), 7)
tetA<-rnorm(14, 0.04, 0.02)
tet.W<-rnorm(14, 0.2, 0.02)

df_analysis_summed <- data.frame(dato, oua_2, tetA, tet.W)

#convert the data frame to long
library(tidyr)
df_analysis_long <- df_analysis_summed %>% pivot_longer(starts_with("tet"), names_to = "genes", values_to = "value")

#function to plot
plot_genes_scat_smooth_long <- function (df) {
  plot <- ggplot()
  plot <- plot +
    geom_smooth(data=df_analysis_long, aes(x=as.Date(dato), y=value, linetype=as.factor(oua_2), colour = genes), method="auto", se=F)

  plot
}

plot_genes_scat_smooth_long(df_analysis_long)