【发布时间】:2023-03-05 16:05:01
【问题描述】:
我正在尝试在 ggplot 中创建多个散点图,它们具有相同的结构但具有不同的 Y 值。我需要将它们分开(因此不使用 facet_wrap),因为在后面的步骤中,我使用 grid_arrange 将图形的不同组合排列到单个布局中。
因此,我需要为每个绘图创建新名称,以反映所绘制的 y 值。下面是示例代码,其中月份是 x 轴上的变量,我想要三个单独的月份图与三个附加变量(lag1_var、lag3_var 和 lag9_var)。
df <- data.frame (month= c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12),
lag1_var= c (10, 20, 30, 40, 10, 40, 30, 50, 70, 90, 100, 100),
lag3_var= c(90, 70, 50, 40, 70, 50, 20, 50, 70, 90, 10, 10),
lag9_var = c(50, 20,90, 100, 90, 10, 40, 90, 100, 20, 30, 70))
我的方法是创建一个 y 值之间不同的值列表,并在该列表上循环,如下所示:
loop.list <- c("1", "3", "9")
for (val in loop.list) {
yval<- paste0("lag", val, "_var")
ptitle <-paste0("graph plot lag", val, "_Var")
assign(paste0("plot", val), ggplot(data=df, aes(x=month, y=get(yval)))
+geom_point(color="red", size=2) + ggtitle(ptitle))
}
当我这样做时,我得到三个具有三个不同名称(plot1、plot3、plot9)和正确标题的图(因此图 1 的标题为“graph plot lag1”,图 3 的标题为“graph plot lag3”等),但它们都是相同的图。因此,循环适用于绘图名称和绘图标题,但不适用于 y 值。它只输出最后一个循环的值(对于变量 lag9_var)。
我无法弄清楚为什么会发生这种情况,以及为什么它只发生在 Y 值而不是标题或情节名称上。我一直在 SAS 中编程并且对 R 不熟悉,所以我认为我是从 SAS 的角度来处理这个问题,而不是以“R”的方式思考它。
注意:在上面的代码中,我在 ggplot 语句之外创建了对象“yval”和“ptitle”,但只是为了帮助排除故障。如果我将它们包含在如下 ggplot 语句中,也会发生同样的事情:
for (val in loop.list) {
assign(paste0("plot", val), ggplot(data=df,aes(x=month,y=get(paste0("lag", val, "_var")))) +
geom_point(color="red", size=2) +
ggtitle(paste0("graph plot lag", val, "_Var")))
}
感谢您的帮助!
【问题讨论】: