gpt4 book ai didi

r - 如何使用for循环在ggplot中添加图层

转载 作者:行者123 更新时间:2023-12-03 20:18:29 24 4
gpt4 key购买 nike

我想将数据框的每一列绘制到ggplot2中的单独图层。
逐层构建绘图效果很好:

df<-data.frame(x1=c(1:5),y1=c(2.0,5.4,7.1,4.6,5.0),y2=c(0.4,9.4,2.9,5.4,1.1),y3=c(2.4,6.6,8.1,5.6,6.3))

ggplot(data=df,aes(df[,1]))+geom_line(aes(y=df[,2]))+geom_line(aes(y=df[,3]))


有没有一种方法可以通过使用一个函数将所有可用列绘制在一个列上?

我试图用这种方式来做,但是没有用:

    plotAllLayers<-function(df){
p<-ggplot(data=df,aes(df[,1]))
for(i in seq(2:ncol(df))){
p<-p+geom_line(aes(y=df[,i]))
}
return(p)
}

plotAllLayers(df)

最佳答案

一种方法是使用库melt()中的功能reshape2将数据帧从宽格式重整为长格式。在新的数据框中,您将具有x1值,确定来自列数据的variable和包含所有原始y值的value

现在,您可以使用一个ggplot()geom_line()调用来绘制所有数据,并使用variable例如使每行具有单独的颜色。

 library(reshape2)
df.long<-melt(df,id.vars="x1")
head(df.long)
x1 variable value
1 1 y1 2.0
2 2 y1 5.4
3 3 y1 7.1
4 4 y1 4.6
5 5 y1 5.0
6 1 y2 0.4
ggplot(df.long,aes(x1,value,color=variable))+geom_line()




如果您确实要使用for()循环(不是最佳方法),则应使用 names(df)[-1]而不是 seq()。这将使列名成为向量(第一列除外)。然后在 geom_line()中使用 aes_string(y=i)通过名称选择列。

plotAllLayers<-function(df){
p<-ggplot(data=df,aes(df[,1]))
for(i in names(df)[-1]){
p<-p+geom_line(aes_string(y=i))
}
return(p)
}

plotAllLayers(df)

关于r - 如何使用for循环在ggplot中添加图层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15987367/

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