【发布时间】:2016-05-17 15:43:47
【问题描述】:
我是 R 的新手,所以在调查我可能不雅的解决问题的尝试时,请考虑这一点。
我使用的数据来自行为心理学研究。我有一个数据框,其中包含来自 3 个不同行为任务的 6 个不同参数(称为 mu、sigma、tau、v、a、Ter)。此外,还有 2 种刺激类型,面部和房屋图片。 colnames(plot_data) 产生以下结果:
[1] "subject" "v.DelayedNMatchingFaces"
[3] "a.DelayedNMatchingFaces" "Ter.DelayedNMatchingFaces"
[5] "mu.DelayedNMatchingFaces" "sigma.DelayedNMatchingFaces"
[7] "tau.DelayedNMatchingFaces" "v.DelayedNMatchingHouses"
[9] "a.DelayedNMatchingHouses" "Ter.DelayedNMatchingHouses"
[11] "mu.DelayedNMatchingHouses" "sigma.DelayedNMatchingHouses"
[13] "tau.DelayedNMatchingHouses" "v.MorphFaces"
[15] "a.MorphFaces" "Ter.MorphFaces"
[17] "mu.MorphFaces" "sigma.MorphFaces"
[19] "tau.MorphFaces" "v.MorphHouses"
[21] "a.MorphHouses" "Ter.MorphHouses"
[23] "mu.MorphHouses" "sigma.MorphHouses"
[25] "tau.MorphHouses" "v.verificFaces"
[27] "a.verificFaces" "Ter.verificFaces"
[29] "mu.verificFaces" "sigma.verificFaces"
[31] "tau.verificFaces" "v.verificHouses"
[33] "a.verificHouses" "Ter.verificHouses"
[35] "mu.verificHouses" "sigma.verificHouses"
[37] "tau.verificHouses"
现在,我需要做一个包含单个参数的双变量散点图,但是每个任务,所以我想做一个 3x3 散点图矩阵(例如:a.DelayedNMatchingFaces、a.MorphFaces、a.verificFaces)。该矩阵将保存到根据参数和刺激类型命名的 png 中(例如,如果它是用于房屋刺激的参数 a,则为“a_H.png”)。我已经构建了一个 for 循环,它遍历列并从列 i、列 i+12 和列 i+24 构建变量矩阵的散点图,因为每个参数在标题行的第 12 步出现一次。循环如下所示:
for (col_ix in 2:13) {
i <- col_ix + 12
j <- col_ix + 24
param_col <- colnames(plot_data)[col_ix]
param <- strsplit(param_col,"[.]")[[1]][1]
if (grepl("Faces", colnames(plot_data)[col_ix]) == TRUE) {
stim_col <- "F"
}
else {
stim_col <- "H"
}
png(paste(param, stim_col, ".png", sep="_"))
scatterplotMatrix(~ plot_data[ ,col_ix] + plot_data[ ,i] + plot_data[ ,j] , span=0.7, data= plot_data)
dev.off()
}
这似乎可行,虽然我承认必须有一千种方法可以更有效地做到这一点,但是嘿,实际上这是我的第一个 R 循环。问题是:当我将散点图矩阵保存为 png 文件时,png 中可见的图根据公式中指示的数据源进行标记,因此在这种情况下,它将是 plot_data[col_ix]、@987654331 @ 和 plot_data[j](见下文)。但是,这些图应该根据列名进行标记,这样当您查看它们时,您可以看到显示哪个变量并用哪个变量绘制。有一个参数叫做var.labels,我已经看到了,但我不知道如何给每个图命名,因为索引col_ix、i 和j 是运行数字并且不能在 var.labels 参数中列出所有三个。
有人可以帮忙吗?非常感谢建议(顺便说一下,如果它们包含不直接链接到变量标签的建议)。如果我的解释不专业或没有正确使用特定术语,我深表歉意;希望一切都是可以理解的。如果需要更多信息,请告诉我,然后我会添加。
非常感谢大家。
【问题讨论】:
-
看看
xlab和ylab。您可以在循环中自动更改标签,例如:ylab=names(plot_data)[j]。在运行循环之前,可能值得玩弄第一列以使内容看起来正确。 -
谢谢!但是,这些是用于标记绘图的 x 轴和 y 轴的命令,对吧?我正在尝试在矩阵 png 中标记诊断图。在图像中,显示了数据源的名称。由于这个来源是
plot_data[ ,col_ix]、plot_data[ ,i]和plot_data[ ,j],这正是图像中出现的文本,但我希望变量名出现。var.labels似乎是正确的选择,但它不允许超过 1 个值(或列表或向量,据我所知)作为输入。但也许我误解了你的评论,或者我太执着于var.labels选项? -
对不起,我看错了你的问题。通常最好让它尽可能简短和简单,因为人们会很快地扫描一个问题。请参阅我的答案尝试。