我有一个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]。怎么办呢?
答案 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
通过这种方式,您甚至不需要循环。