R-如何绘制未按年份排序的周,月和季度的季度?

时间:2019-08-24 14:37:09

标签: r datetime shiny plotly interactive

我正在尝试绘制具有周数的数据(如01-2017、02-2017等[也包括月份(如2017年1月,2017年2月等)。以及按季度,如Q1-2017,Q2-2017] )在x轴上,而整数变量在y轴上。

问题在于,如下图所示,正在按顺序对x轴进行排序。
weeks on x-axis sorted by plotly
在上图中,您可以看到2017年之前属于2018年的几周。
months on x-axis sorted by plotly
在上图中,您可以看到已排序的月份(2017年11月之后的2018年2月)。

我可以从this stackoverflow answer获取日期以按帮助进行排序。 这是我从日期(link to my data)生成星期数,月份和季度的步骤:

data <- read.csv("dummy wait times data.csv", header = TRUE)
data$Date <- as.Date(data$Date, "%d-%m-%y")
data$weeks <- format(data$Date, "%U-%Y")
data$months <- format(data$Date, "%B-%Y")
data$quarters <- paste(quarters(data$Date), format(data$Date, "%Y"), sep = "-")

此外,经过大量过滤(在选择了月,周或季度后计算的平均值),该图将在闪亮的应用程序中。所以,我的情节代码是:

plot_ly(data = filtered_data(),
        # since the column names returned by aggregation function change, let's plot using indexes.
        x = ~column_with_some_sort_of_date,
        y = ~integer_column,
        type = "bar",
        # using the reactive department input and splitting the data.
        split = ~categorical_column)

[[“ {column_with_some_sort_of_date”可能是每周一次,每月一次或每季度一次,基于闪亮应用中的selectInput。 我的数据中“ categorical_column是“ Department”(在闪亮的应用程序中有一个复选框输入(checkboxGroupInput)。]]

所以,请帮助我对日期进行排序并绘制它们。我也准备学习任何其他交互式绘图库(ggplotly不起作用)。

1 个答案:

答案 0 :(得分:1)

考虑将时间单位生成为format来创建因子矢量,这就是x轴按字母顺序排序的原因。因素可能会在情节上转化为类别字段。但是,在分配因子之前,先按 Date 排序一阶数据帧:

# READ DATA
data <- transform(read.csv("dummy wait times data.csv", header = TRUE),
                  Date = as.Date(Date, "%d-%m-%y"))

# ORDER DATA FRAME BY DATE
data <- data.frame(with(data, data[order(Date),]), 
                   row.names = NULL)

# ASSIGN ORDERED FACTORS
data <- within(data, {
    weeks <- format(Date, "%U-%Y")
    weeks <- factor(weeks, levels = unique(weeks))

    months <- format(Date, "%B-%Y")
    months <- factor(months, levels = unique(months))

    quarters <- paste(quarters(Date), format(Date, "%Y"), sep = "-")
    quarters <- factor(quarters, levels = unique(quarters))
})