我在R中有一个数据框。第一列是日期。其余列是每个类别的数据。
Date View1 View2 View3 View4 View5 View6
1 2010-05-17 13 10 13 10 13 10
2 2010-05-18 11 11 13 10 13 10
3 2010-05-19 4 12 13 10 13 10
4 2010-05-20 2 10 13 10 13 10
5 2010-05-21 23 16 13 10 13 10
6 2010-05-22 26 15 13 10 13 10
如何绘制两条线的时间图?每列的每一行。即View1的一行,View2的一行,View3的一行,依此类推。 x轴是日期。 ggplot中有功能可以轻松实现吗?
我搜索了其他帖子,在下面看到了一个解决方案,但这在情节上没有任何帮助。
mydf %>% gather(key,value, View1, View2, View3, View4, View5, View6 ) %>% ggplot(aes(x=Date, y=value, colour=key))
我还尝试了以下命令。
test_data_long1 <- melt(mydf, id="Date")
ggplot(data=test_data_long1,
aes(x=date, y=value, colour=variable)) +
geom_line()
这给我一个错误。
Don't know how to automatically pick scale for object of type function. Defaulting to continuous.
Error: All columns in a tibble must be 1d or 2d objects:
* Column `x` is function
答案 0 :(得分:0)
您只是重写了一个用于绘制的数据框:
dates <- c("2010-05-17", "2010-05-18", "2010-05-19", "2010-05-20", "2010-05-21")
df<- data.frame(date = dates, view1 = sample(10:15, 5, replace = TRUE),
view2 = sample(10:15, 5, replace = TRUE),
view3 = sample(10:15, 5, replace = TRUE),
view4 = sample(10:15, 5, replace = TRUE))
df$date <- as.Date(df$date)
toPlot1 <- df[,c(1,2)]
toPlot1[,3] <- "view1"
names(toPlot1) <- c("date", "n", "view")
toPlot2 <- df[,c(1,5)]
toPlot2[,3] <- "view4"
names(toPlot2) <- c("date", "n", "view")
toPlot<-bind_rows(toPlot1, toPlot2)
图形如下:
ggplot(toPlot, aes(date, n, linetype = view)) + geom_line()
或者,使用reshape2包,您可以融化数据:
library(reshape2)
meltedDf <- melt(df , id.vars = 'date', variable.name = 'series')
ggplot(meltedDf, aes(date, value, linetype = series)) + geom_line()