繁体   English   中英

如何在R的循环中创建具有不同y变量的图?

[英]How can I create plots with different y variables in a loop in R?

预先致歉,我一般对R和编程还是陌生的。

我有一个每年都测量的几个水质变量的数据集。 我想做的看起来很简单,那就是创建几个探索性散点图,在x轴上绘制每个变量与时间的关系。 我一直在考虑使用循环来做到这一点(是的,我知道循环是不受欢迎的,但是正如我所说,我是新来的),因为我将不得不做大量分析,然后再做不想写一堆多余的代码。

制作每个图都很好,但是我在如何给每个图一个唯一的标识符(例如,根据我要循环的特定变量写y标签和图表标题)方面空白。

这就是我要编写的代码,尽管我不确定它可能有多有用。 关于如何哄骗循环函数完成我想要的事情的建议会很棒。

WQdata <- data # the dataframe
names <- colnames(WQdata[, -1]) # names of variables, excluding Year which was first column
Year <- WQdata$Year
vars <- c(WQdata[, -1]) # removed year, 

for (i in vars) {
    xlim <- range(Year) 
    ylim <- range(i)
    plot(x=Year, 
         y=i,
         type="p",
         main=paste(names[i]),
         xlab="Year",
         ylab=paste(names[i]))
}

到目前为止,这样做是按照我的意愿制作每个图,但是没有这些自定义标签。

再次,我为模糊或遗漏而感到抱歉-感到困惑。

谢谢!

您可以将ggplot与facet一起使用,以减少代码,而无需循环和重复代码...

library(ggplot2)
library(tidyverse)

df <- mtcars %>%
    gather(-mpg, key="var", value = "value")

ggplot(df, aes(x = mpg, y = value)) +
    geom_point(alpha = 0.3) +
    geom_smooth(method = "lm") +
    facet_wrap(~var, scales = "free") +
    theme_bw()

您可以尝试创建标题和y标签的列表,并在循环中引用它们。

使用mtcars的示例:

labels <- list("cyl" = c("main - cylinders", "ylabel - cylinders"),
               "disp" = c("main displacement", "ylabel - cylinders"),
               "hp" = c("main horsepower", "ylabel - horsepower")
               )


for (i in colnames(mtcars)[2:4]){
  plot(x=mtcars[,'mpg'], 
       y=mtcars[ ,i],
       type = "p",
       main = labels[[i]][1],
       xlab= "mpg",
       ylab= labels[[i]][2]
  )
  }

这是使用字符向量和索引的答案:

df <- data.frame(YEAR = c(2013,2014,2015,2014,2013), 
                 INCHES = c(12,36,34,23,12), 
                 TEMP = c(89,98,76,87,65),
                 PRESSURE = c(0.05, 0.10, 0.12, 0.85, 0.90))

# Must correspond to variables except for `YEAR` in `df`
# `y_axis_labels` are your custom labels
y_axis_labels = c("Inches", "Temperature", "Pressure")
y_axis_vars = names(df[, -1])

xlim <- range(df$YEAR)

for(i in 1:length(y_axis_vars)){
  curr_y_axis_var = y_axis_vars[i]
  ylim <- range(df[[curr_y_axis_var]])

  plot(x = df$YEAR,
       y = df[[curr_y_axis_var]],

       type = "p",
       main = paste(curr_y_axis_var),
       xlab = 'YEAR',
       ylab = paste(curr_y_axis_var))
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM