我正在尝试使用ggplot2
绘制多线时间序列图。我一直遵循我所找到的指示,但似乎没有任何作用。
我已经根据文档尝试过多次尝试。
我正在使用的数据如下:
+----------------+----------+--------+
| purchase_month | type | orders |
+----------------+----------+--------+
| 2018-07 | local | 199 |
| 2018-08 | local | 231 |
| 2018-09 | local | 222 |
| 2018-10 | local | 190 |
| 2018-07 | domestic | 1102 |
| 2018-08 | domestic | 924 |
| 2018-09 | domestic | 999 |
| 2018-10 | domestic | 779 |
+----------------+----------+--------+
ggplot(data = sample_data, aes(x = purchase_month, y = orders)) +
geom_line(aes(color = type), size = 1) +
scale_color_manual(values = c("#00AFBB", "#E7B800")) +
theme_minimal()
运行代码时,它不起作用。当我运行前两行时,它甚至都没有绘制任何点。它只是建立X和Y轴。
答案 0 :(得分:2)
棘手的部分是在数据集中有一个列作为日期。我们一起做吧。首先,让我们使用这些数据来解决我们的问题:
sample_data <- structure(list(purchase_month = structure(c(17713, 17744, 17775,
17805, 17713, 17744, 17775, 17805), class = "Date"), type = structure(c(2L,
2L, 2L, 2L, 1L, 1L, 1L, 1L), .Label = c("domestic", "local"), class = "factor"),
orders = c(199, 231, 222, 190, 1102, 924, 999, 779)), row.names = c(NA,
-8L), class = "data.frame")
这是我们将要使用的数据:
sample_data
purchase_month type orders
1 2018-07 local 199
2 2018-08 local 231
3 2018-09 local 222
4 2018-10 local 190
5 2018-07 domestic 1102
6 2018-08 domestic 924
7 2018-09 domestic 999
8 2018-10 domestic 779
请注意,purchase_month
不是日期。我将其转换为在末尾添加-01
的日期,因为R
中的每个日期都需要一天。由于您对几个月感兴趣,因此我们可以在这里使用任何一天。然后,我将使用ymd
包中的lubridate
函数来通知R
我们的字符串采用年月日格式:
library(lubridate)
sample_data$purchase_month <- ymd(paste0(sample_data$purchase_month, "-01"))
不是,您只需要使用自己的ggplot2
代码即可获得自己的情节:
ggplot(data = sample_data, aes(x = purchase_month, y = orders)) +
geom_line(aes(color = type), size = 1) +
scale_color_manual(values = c("#00AFBB", "#E7B800")) +
theme_minimal()
答案 1 :(得分:2)
如果我们将purchase_month
列更改为类yearmon
,然后指定与X比例相同的值,它将起作用。使用末尾注释中可重复显示的数据:
library(zoo)
sample_data2 <- transform(sample_data, purchase_month = as.yearmon(purchase_month))
ggplot(data = sample_data2, aes(x = purchase_month, y = orders)) +
geom_line(aes(color = type), size = 1) +
scale_color_manual(values = c("#00AFBB", "#E7B800")) +
theme_minimal() +
scale_x_yearmon()
或另一种方法是将其转换为每个类型只有一列的宽格式多变量系列,并使用autoplot.zoo
。请注意,通过省略facet = NULL
可以产生多面板输出。
library(zoo)
z <- read.zoo(sample_data, index = "purchase_month", split = "type", FUN = as.yearmon)
autoplot(z, geom = "blank", facet = NULL) +
geom_line(size = 1) +
scale_color_manual(values = c("#00AFBB", "#E7B800")) +
theme_minimal() +
scale_x_yearmon()
其中任何一种都会产生:
Lines <- "
purchase_month | type | orders
2018-07 | local | 199
2018-08 | local | 231
2018-09 | local | 222
2018-10 | local | 190
2018-07 | domestic | 1102
2018-08 | domestic | 924
2018-09 | domestic | 999
2018-10 | domestic | 779"
sample_data <- read.table(text = Lines, header = TRUE, sep = "|", strip.white = TRUE)
答案 2 :(得分:1)
您的代码有两点错误:
purchase_month
不是类"Date"
的对象。group
来type
数据。我的意思是
sample_data$purchase_month <- as.Date(paste(sample_data$purchase_month, "01", sep = "-"))
ggplot(data = sample_data,
aes(x = purchase_month, y = orders, color = type), group = type) +
geom_line(size = 1) +
scale_color_manual(values = c("#00AFBB", "#E7B800")) +
theme_minimal()