分区日期不显示x轴上的每个bin

时间:2017-02-28 19:56:25

标签: r ggplot2

我有一个充满日期和价值对的文件。我想按月收集点数,然后显示一个盒子和胡须图。我的问题是我有几个月的数据,所以我只想显示一些的x轴标签。

我的代码如下所示:

library(ggplot2)
library(reshape2)
library(scales)

data <- read.delim("values.tsv", header=TRUE)

# Interpret the strings as dates
data$Date <- as.Date(data$Date, "%Y-%m-%d %H:%M:%S %z")

# Bin the data by month
data$Date <- cut(data$Date, breaks="1 month")

ggplot(data, aes(factor(Date), Temperature)) +
    geom_boxplot()

ggsave("output.pdf", width=8, height=6, units="in")

以下是适当格式的一些示例数据:

Date    Temperature
2016-09-29 07:16:00 -0500   295.0
2016-09-30 07:23:00 -0500   295.0
2016-10-03 10:27:00 -0500   297.8
2016-10-04 07:27:00 -0500   296.2
2016-10-26 05:52:00 -0500   294.2
2016-10-27 06:18:00 -0500   294.2
2016-10-28 07:41:00 -0500   294.2
2016-11-27 09:07:00 -0500   293.6
2016-11-30 08:03:00 -0500   295.0
2016-12-01 08:12:00 -0500   295.0
2016-12-02 08:01:00 -0500   293.2
2016-12-07 08:02:00 -0500   294.6
2016-12-08 07:50:00 -0500   294.6
2016-12-09 08:37:00 -0500   293.2
2016-12-12 08:25:00 -0500   294.4
2016-12-13 07:47:00 -0500   293.2
2016-12-14 07:52:00 -0500   294.6
2017-01-09 07:53:00 -0500   294.0
2017-01-10 08:26:00 -0500   294.4
2017-01-11 08:20:00 -0500   294.6
2017-01-31 08:16:00 -0500   290.6
2017-02-07 07:59:00 -0500   290.8
2017-02-08 08:10:00 -0500   290.6
2017-02-09 08:33:00 -0500   291.2
2017-02-10 07:57:00 -0500   290.4
2017-02-13 07:48:00 -0500   290.4
2017-02-28 08:19:00 -0500   291.8

真实数据包括四十个月内的数百个数据点。数据正在正确分组,但是当我尝试通过

添加比例时
scale_x_date(date_breaks="4 months", date_labels="%b '%y")

我收到错误

  

错误:输入无效:date_trans仅适用于类Date的对象

我认为似乎cut将输入日期转换为其他字符串。如何将x轴值转换回日期,以便我可以将scale_x_date应用于它们?

1 个答案:

答案 0 :(得分:2)

问题在于cut正在将您的数据转换为因素,因此它不再是日期,因此无法应用scale_x_date

我们可以通过为您的boxplot创建一个月的分组变量并在aes调用中对观察结果进行分组来解决此问题。

data$Month <- cut(data$Date, breaks="1 month")

ggplot(data, aes(Date, Temperature, group = Month)) +
  geom_boxplot() +
  scale_x_date(date_breaks="4 months", date_labels="%b '%y")

X仍然是一个日期,但您的观察结果会根据情节进行分组。我在上传图表时遇到问题,但根据您的示例数据,我认为它工作正常。