提前道歉,我对R和一般的编程都很陌生。
我有几个水质变量的数据集,每年都进行测量。我想要做的似乎很简单,即创建几个探索性散点图,在x轴上绘制每个变量与时间的关系图。我一直在考虑用循环来做这个(是的,我知道循环并不受欢迎,但就像我说的,我是新的)自动化它,因为我将不得不做一堆之后的分析并不想写一堆冗余代码。
生成每个图表已经很好了,但是我在如何为每个图表赋予唯一标识符(即根据我正在循环的特定变量写出y标签和图表标题)上留下了空白。 / p>
以下是我对代码的看法,但我不确定它有多么有用。关于如何诱导循环功能做我想做的事情的建议会很棒。
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]))
}
到目前为止,这是我想要的每个情节,但没有那些自定义标签。
再次,我为模糊或遗漏而道歉 - 感到困惑。
谢谢!
答案 0 :(得分:3)
你可以使用ggplot with facets来减少没有循环和重复代码的代码......
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()
答案 1 :(得分:1)
您可以尝试创建标题和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]
)
}
答案 2 :(得分:0)
以下是使用字符向量和索引的答案:
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))
}