我有两个数据帧tur_e和tur_w。您可以在下面看到数据框: tur_e:
Time_f turbidity_E
1 2014-12-12 00:00:00 87
2 2014-12-12 00:15:00 87
3 2014-12-12 00:30:00 91
4 2014-12-12 00:45:00 84
5 2014-12-12 01:00:00 92
6 2014-12-12 01:15:00 89
tur_w:
Time_f turbidity_w
47 2015-06-04 11:45:00 8.4
48 2015-06-04 12:00:00 10.5
49 2015-06-04 12:15:00 9.2
50 2015-06-04 12:30:00 9.1
51 2015-06-04 12:45:00 8.7
52 2015-06-04 13:00:00 8.4
然后我创建了一个结合了turbidity_E和turbidity_w的唯一数据帧。我匹配日期(time_f)并使用熔化来重塑数据:
dplr <- left_join(tur_e, tur_w, by=c("Time_f"))
dt.df <- melt(dplr, measure.vars = c("turbidity_E", "turbidity_w"))
我随着时间的推移绘制了一系列箱形图。代码如下:
dt.df%>% mutate(Time_f = ymd_hms(Time_f)) %>%
ggplot(aes(x = cut(Time_f, breaks="month"), y = value)) +
geom_boxplot(outlier.size = 0.3) + facet_wrap(~variable, ncol=1)+labs(x = "time")
我获得了以下图表:
我想减少x轴上出现的日期数量。我添加了这行代码:
scale_x_date(breaks = date_breaks("6 months"),labels = date_format("%b"))
我收到以下错误:
Error: Invalid input: date_trans works with objects of class Date only
我尝试了很多不同的解决方案,但没有人工作。任何帮助将不胜感激!谢谢!
答案 0 :(得分:1)
两件事。首先,您需要使用scale_x_datetime
(您没有日期,但也有时间!)。其次,当你cut
x时,它实际上只是一个因素,完全失去了任何时间感。如果您想要每个月的箱线图,可以group
代替cut
:
dt.df %>% mutate(Time_f = lubridate::ymd_hms(Time_f)) %>%
ggplot(aes(x = Time_f, y = value, group = cut(Time_f, breaks="month"))) +
geom_boxplot(outlier.size = 0.3) +
facet_wrap(~variable, ncol = 1) +
labs(x = "time") +
scale_x_datetime(date_breaks = '1 month')