Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用某些数据帧进行不同的打印_R_Ggplot2 - Fatal编程技术网

R 使用某些数据帧进行不同的打印

R 使用某些数据帧进行不同的打印,r,ggplot2,R,Ggplot2,我有一个数据帧列表保存为df.list。对于一些数据帧,我想绘制geom_线和geom_点(df.1),但对于一些数据帧,我只想要geom_线(df.2,df.3)。有没有一种有效的方法可以做到这一点?我正在使用mapply()进行绘图,并且可以使用mapply()两次获得我想要的结果,但是我想要一个使用单个mapply()的解决方案 下面给出的示例中,我尝试了子集设置,但仍然只给出了仅使用线条的绘图,但我尝试使用线条和点绘制df.1,而使用线条绘制df.2/df.3 我尝试过在geom_poi

我有一个数据帧列表保存为df.list。对于一些数据帧,我想绘制geom_线和geom_点(df.1),但对于一些数据帧,我只想要geom_线(df.2,df.3)。有没有一种有效的方法可以做到这一点?我正在使用mapply()进行绘图,并且可以使用mapply()两次获得我想要的结果,但是我想要一个使用单个mapply()的解决方案

下面给出的示例中,我尝试了子集设置,但仍然只给出了仅使用线条的绘图,但我尝试使用线条和点绘制df.1,而使用线条绘制df.2/df.3

我尝试过在geom_point中进行子集设置,但看起来您只能在数据帧中进行子集设置,而不能在数据帧列表中进行子集设置

我也尝试过使用ifelse,但是只有第一个元素将用于条件语句,我不想使用循环和映射

df.1 <- iris[1:50,]
df.2 <- iris[51:100,]
df.3 <- iris[101:150,]

df.list <- list(df.1, df.2, df.3)
df.names <- c("df.1", "df.2", "df.3")
names(df.list) <- df.names; list2env(df.list, .GlobalEnv)

name.y <- c("1", "2", "3")
name.x <- c("df.1")


mapply(function(x, k) {
  ggplot(x, aes(Sepal.Width, Petal.Length, colour = Species)) + 
    labs(y = k) + geom_line() + geom_point(data = subset(x, is.element(names(x), name.x)))
}, SIMPLIFY = FALSE, x = df.list, k = name.y)

df.1最有可能的情况是直接使用data.frames列表,它可能会起作用。。希望这就是你打算做的:

df.list <- list(df.1, df.2, df.3)
df.names <- c("df.1", "df.2", "df.3")
names(df.list) <- df.names; list2env(df.list, .GlobalEnv)

plt = function(x,k){
g = ggplot(x, aes(Sepal.Width, Petal.Length, colour = Species)) + 
labs(y = k) + geom_line() 
if(k=="1"){
g = g + geom_point()
}
return(g)
}

library(patchwork)
P = mapply(plt, SIMPLIFY = FALSE, x = df.list, name.y)
wrap_plots(P)

df.list这正是我要找的!谢谢