gpt4 book ai didi

r - 用一些数据帧 r 绘制不同的图

转载 作者:行者123 更新时间:2023-12-04 04:05:57 25 4
gpt4 key购买 nike

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

下面给出的示例我尝试了子集化,但仍然只给出了只有线条的图,但我试图让 df.1 用线条和点绘制,而 df.2/df.3 只用线条绘制。

我已经尝试在 geom_point 中进行子集化,但看起来您只能在数据帧中进行子集化,而不能在数据帧列表中进行子集化。

我也尝试过使用 ifelse,但只有第一个元素会用于条件语句,我不想​​使用循环 AND mapply。

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)

最佳答案

很可能您直接使用了 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)

enter image description here

关于r - 用一些数据帧 r 绘制不同的图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62516001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com