问题与日期ggplot具有正确的比例

时间:2018-04-03 02:14:03

标签: r plot ggplot2 scale

我有两个数据帧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") 

我获得了以下图表:

plot

我想减少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

我尝试了很多不同的解决方案,但没有人工作。任何帮助将不胜感激!谢谢!

1 个答案:

答案 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')