为什么在解析绘图参数时R会有不同的表现?

问题描述

我正在尝试使用ggplot在单个折线图上绘制多个时间序列变量。我正在使用一个包含n个时间序列变量和一列时间段的data.frame。本质上,我想遍历data.frame,并在单个图表中恰好添加n条goem_lines

最初,我尝试使用以下代码,其中;

  • df =包含n个时间序列变量和1列时间段的data.frame
  • wid = n(时间序列变量的数量
  p <- ggplot() +
    scale_color_manual(values=c(colours[1:wid]))  
  for (i in 1:wid) {
    p <- p + geom_line(aes(x=df$Time,y=df[,i],color=var.lab[i]))
  } 
  ggplotly(p)

但是,这只会在data.frame中生成最终时间序列变量的图。然后,我进一步调查,发现以下代码集产生了完全不同的结果:

p <- ggplot() +
    scale_color_manual(values=c(colours[1:wid]))
i = 1
p = p + geom_line(aes(x=df$Time,color=var.lab[i]))
i = 2
p = p + geom_line(aes(x=df$Time,color=var.lab[i]))
i = 3
p = p + geom_line(aes(x=df$Time,color=var.lab[i]))
  ggplotly(p)

Plot produced by code above

p <- ggplot() +
    scale_color_manual(values=c(colours[1:wid]))
p = p + geom_line(aes(x=df$Time,1],color=var.lab[1]))
p = p + geom_line(aes(x=df$Time,2],color=var.lab[2]))
p = p + geom_line(aes(x=df$Time,3],color=var.lab[3]))
  ggplotly(p)

Plot produced by code above

在我看来,这两套代码是相同的,所以谁能解释为什么它们产生如此不同的结果?

我知道使用自动绘图可以很容易地做到这一点,但是我对这两个代码片段的行为更感兴趣。

解决方法

您试图做的是通过绘制多条线的“ hack”方式,但这在ggplot术语中并不理想。要成功完成此操作,我将使用static var previews: some View { BackgroundView { Text("Hello,world") } } 。但这是黑客

aes_string

enter image description here

如何正确执行

要更正确地绘制此图,您需要先旋转数据,以便将每种美感(aes)映射到数据框中的变量。这意味着我们需要在数据帧中将一个变量设为df <- data.frame(Time = 1:20,Var1 = rnorm(20),Var2 = rnorm(20,mean = 0.5),Var3 = rnorm(20,mean = 0.8)) vars <- paste0("Var",1:3) col_vec <- RColorBrewer::brewer.pal(3,"Accent") library(ggplot2) p <- ggplot(df,aes(Time)) for (i in 1:length(vars)) { p <- p + geom_line(aes_string(y = vars[i]),color = col_vec[i],lwd = 1) } p + labs(y = "value") 。因此,我们color并再次绘图:

pivot_longer

enter image description here