将多个数据添加到ggplot?

时间:2017-04-24 10:22:14

标签: r

我有一个N列的数据框(事先不知道),每天包含X_1,X_2,... X_N的值。我需要能够绘制X_1,X_2,...... X_N

colors_list <- palette(rainbow(length(N)))
p <- ggplot(Store_Data.df, aes(x = Day)) + ylab(label="Value") + xlab("Time") + 
geom_line(aes(y = Data.df$V1, colour=colors_list[1])) +
geom_line(aes(y = Data.df$V2 colour=colors_list[2])) +
.
.
.
geom_line(aes(y = Data.df$V2 colour=colors_list[N]))

如何实现这一点,即无需硬编码。我试图循环列数据,即

 colors_list <- palette(rainbow(length(N)))
p <- ggplot(Store_Data.df, aes(x = Day)) + ylab(label="Value") + xlab("Time") 
for (i in 1:N){
    p <- p + geom_line(aes(y = Data.df$[,i], colour=colors_list[i]))
}

但该图仅显示最后一组值,即y = Data.df $ [,N]。怎么办呢?

1 个答案:

答案 0 :(得分:0)

ggplot只允许将一个列指定为y变量,因为它基于长格式,而不是宽格式。

要获得您想要的最简单的方法是将数据重新整形为长格式,然后按颜色分组。

以下是使用R中的瑞士数据集和重塑包中的融合函数的快速示例。

require(reshape2)
swiss_soldiers<-swiss #data in wide format
swiss_soldiers<- melt(swiss_soldiers, "Fertility") #Reshape to long format, using "Fertility" as x variable
head(swiss_soldiers)
  Fertility    variable value
1      80.2 Agriculture  17.0
2      83.1 Agriculture  45.1
3      92.5 Agriculture  39.7
4      85.8 Agriculture  36.5
5      76.9 Agriculture  43.5
6      76.1 Agriculture  35.3
ggplot(swiss_soldiers)+aes(x=Fertility, y=value, colour=variable)+geom_point()+geom_smooth(method = "lm")
#A graph containing the individual data as points plus a linear trendline

A graph containing the individual data as points plus a linear trendline

通过这种方式,您甚至不需要循环。