我有一个充满日期和价值对的文件。我想按月收集点数,然后显示一个盒子和胡须图。我的问题是我有几个月的数据,所以我只想显示一些的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
应用于它们?
答案 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仍然是一个日期,但您的观察结果会根据情节进行分组。我在上传图表时遇到问题,但根据您的示例数据,我认为它工作正常。