绘制一个很长的时间序列?

时间:2018-02-07 10:44:19

标签: r plot ggplot2

我有一个数据集,提供有关产品的信息,我想绘制一些关于2年内每个月的统计数据。我已经完成了所需的工作,以达到我想要的这个阶段。

df <- structure(list(how_many = c(14L, 654L, 8L, 373L, 33L, 240L, 48L, 
242L, 2L, 45L, 239L, 5L, 29L, 206L, 20L, 29L, 194L, 49L, 25L, 
143L, 17L, 21L, 121L, 12L, 22L, 83L, 1L, 20L, 90L, 15L, 713L), 
    prod_vers = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 3L, 
    1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 
    1L, 2L, 3L, 1L, 2L, 1L, 2L), .Label = c("v1", "v2", "v3"), class = "factor"), 
    when = structure(c(16801, 16801, 16832, 16832, 16495, 16861, 
    16526, 16892, 16892, 16556, 16922, 16922, 16587, 16953, 16953, 
    16617, 16617, 16983, 16648, 17014, 17014, 16679, 16679, 17045, 
    16709, 17075, 17075, 16740, 16740, 16770, 16770), class = "Date")), .Names = c("how_many", 
"prod_vers", "when"), row.names = c(NA, -31L), class = "data.frame")

    how_many  prod_vers   when
1        14          v1 2016-01
2       654          v2 2016-01
3         8          v1 2016-02
4       373          v2 2016-02
5        33          v1 2015-03
6       240          v2 2016-03
7        48          v1 2015-04
8       242          v2 2016-04
9         2          v3 2016-04
10       45          v1 2015-05
11      239          v2 2016-05
12        5          v3 2016-05
13       29          v1 2015-06
14      206          v2 2016-06
15       20          v3 2016-06
16       29          v1 2015-07
17      194          v2 2015-07
18       49          v3 2016-07
19       25          v1 2015-08
20      143          v2 2016-08
21       17          v3 2016-08
22       21          v1 2015-09
23      121          v2 2015-09
24       12          v3 2016-09
25       22          v1 2015-10
26       83          v2 2016-10
27        1          v3 2016-10

但我不知道如何策划它。我尝试过barplot,但它没有用。我还考虑过这样做:考虑到他们相应产品版本的大量月份

一个包含2015年及其月份和版本的图表,以及2016年的一个图表。我不确定它是否会看起来整洁

同样在每个月的每个版本中绘制他们自己的情节都会有很多情节。

总结一下我如何策划这个?

数据集:mediafire.com/file/tt2l50nz4dzgaw6/DataforSover.csv

2 个答案:

答案 0 :(得分:1)

df <- structure(list(how_many = c(14L, 654L, 8L, 373L, 33L, 240L, 48L, 
242L, 2L, 45L, 239L, 5L, 29L, 206L, 20L, 29L, 194L, 49L, 25L, 
143L, 17L, 21L, 121L, 12L, 22L, 83L, 1L, 20L, 90L, 15L, 713L), 
    prod_vers = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 3L, 
    1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 
    1L, 2L, 3L, 1L, 2L, 1L, 2L), .Label = c("v1", "v2", "v3"), class = "factor"), 
    when = structure(c(16801, 16801, 16832, 16832, 16495, 16861, 
    16526, 16892, 16892, 16556, 16922, 16922, 16587, 16953, 16953, 
    16617, 16617, 16983, 16648, 17014, 17014, 16679, 16679, 17045, 
    16709, 17075, 17075, 16740, 16740, 16770, 16770), class = "Date")), .Names = c("how_many", 
"prod_vers", "when"), row.names = c(NA, -31L), class = "data.frame")

df$when <- as.Date(paste0(as.character(df$when), "-01"))

library(ggplot2)
ggplot(df, aes(x = when, y = how_many)) +
  geom_line() + 
  facet_grid(~prod_vers)

enter image description here

这个怎么样?您可以使用scales中的facet_grid选项(例如scales = 'free_y')为方面使用不同的比例。

答案 1 :(得分:1)

您可以使用构面按组分隔数据,如下所示:

data <- read.csv("DataforSover.csv")

colnames(data) <- c("X", "count", "app_version", "dt")

data$dt <- as.character(data$dt)

ggplot(data, aes(x = dt, y = count)) +
  geom_bar(stat="identity") +
  facet_grid(app_version ~ .) +
  xlab("Month") +
  ylab("Count") +
  ggtitle("Count by Month & App Version")

ggplot(data, aes(x = dt, y = count)) +
  geom_bar(stat="identity") +
  facet_grid(app_version ~ substring(dt, 1, 4)) +
  xlab("Month") +
  ylab("Count") +
  ggtitle("Count by Month, Year & App Version")