scale_x_date在其他列上或使用小时和日期

时间:2017-07-07 09:04:38

标签: r datetime ggplot2

我有一个数据框,我已将小时添加到我的日期结束

数据:

 structure(list(date = c("2016-01-30 11", "2016-01-30 13", "2016-01-30 16", 
    "2016-01-30 18", "2016-01-30 21", "2016-01-31 2", "2016-01-31 5", 
    "2016-01-31 7", "2016-01-31 13", "2016-01-31 13"), Obs = c(9L, 
    15L, 15L, 16L, 15L, 16L, 15L, 16L, 14L, 9L), score = structure(c(3L, 
    1L, 3L, 1L, 3L, 1L, 3L, 1L, 3L, 2L), .Label = c("1", "1.5", "2"
    ), class = "factor"), date2_1 = c("2016-01-30", "2016-01-30", 
    "2016-01-30", "2016-01-30", "2016-01-30", "2016-01-31", "2016-01-31", 
    "2016-01-31", "2016-01-31", "2016-01-31"), date2_2 = c(11L, 13L, 
    16L, 18L, 21L, 2L, 5L, 7L, 13L, 13L)), .Names = c("date", "Obs", 
    "score", "date2_1", "date2_2"), class = c("data.table", "data.frame"
    ), row.names = c(NA, -10L), .internal.selfref = <pointer: 0x00000000001f0788>)

我的情节是:

ggplot(data = tt, aes(date2_1, Obs, colour=score)) + 
       geom_point() +   
       scale_colour_discrete(drop=TRUE, limits = levels(t$score))

在另一个数据框中,我只有日期(相当于此数据中的date2_1),并使用as.Date更改类,以便以下工作:

ggplot(data = t, aes(date, Obs, colour=score)) + 
       geom_point() + 
       scale_x_date(date_breaks = "1 day", date_labels="%d") +  
       scale_colour_discrete(drop=TRUE, limits = levels(t$score))

我想在我展示的第一张图上使用scale_x_date(date_breaks = "1 day", date_labels="%d"),但使用date2_1代替date进行缩放。

额外:更好的是在我的示例数据中使用比例从date开始运行,但是当我将小时粘贴到它上面时,这不是类日期。此数据框是另一个的子集,其中我有一个日期时间列,其值为2016-01-30 11:50:52 POSIXct如果有帮助 - 实际上我使用cSplit然后从中粘贴以获取我在样本数据中的日期。使用as.POSIXctstrptime我无法创建仅包含小时的日期,或者如果我scale_x_date无法使用它。

基本上我有一个只有缩放井的日期的图,但是当使用日期和小时时,日期时间在x轴上均匀分布,而不考虑日期和小时。

对这两个选项的答案将不胜感激!

1 个答案:

答案 0 :(得分:2)

目前尚不清楚你遇到的问题是什么,也不是你想要的是什么,但希望这至少可以指出你正确的方向。

您要求的第一个选项是使用x轴date2_1中的日期,我认为date2_1转换为Date没有任何问题:

library(ggplot2)

ggplot(df, aes(as.Date(date2_1), Obs, color = score)) +
  geom_point() +
  scale_x_date('Date',
               date_breaks = 'day',
               date_labels = '%d')

第二个选项会考虑date列中的小时,因此我们必须使用正确的格式将其转换为POSIXct(请注意使用scale_x_datetime代替scale_x_date):

library(dplyr)
library(ggplot2)

df %>% 
  mutate(date = as.POSIXct(date, format = '%Y-%m-%d %H')) %>% 
  ggplot(aes(date, Obs, color = score)) +
  geom_point() +
  scale_x_datetime('Date',
                   date_breaks = '6 hours',
                   date_labels = '%d h:%H')

数据:

df <- structure(list(date = c("2016-01-30 11", "2016-01-30 13", "2016-01-30 16", 
                              "2016-01-30 18", "2016-01-30 21", "2016-01-31 2", "2016-01-31 5", 
                              "2016-01-31 7", "2016-01-31 13", "2016-01-31 13"), Obs = c(9L, 
                                                                                         15L, 15L, 16L, 15L, 16L, 15L, 16L, 14L, 9L), score = structure(c(3L, 
                                                                                                                                                          1L, 3L, 1L, 3L, 1L, 3L, 1L, 3L, 2L), .Label = c("1", "1.5", "2"
                                                                                                                                                          ), class = "factor"), date2_1 = c("2016-01-30", "2016-01-30", 
                                                                                                                                                                                            "2016-01-30", "2016-01-30", "2016-01-30", "2016-01-31", "2016-01-31", 
                                                                                                                                                                                            "2016-01-31", "2016-01-31", "2016-01-31"), date2_2 = c(11L, 13L, 
                                                                                                                                                                                                                                                   16L, 18L, 21L, 2L, 5L, 7L, 13L, 13L)), .Names = c("date", "Obs", 
                                                                                                                                                                                                                                                                                                     "score", "date2_1", "date2_2"), class = c("data.table", "data.frame"
                                                                                                                                                                                                                                                                                                     ), row.names = c(NA, -10L))

(请注意,我必须从您的.internal.selfref = <pointer: 0x00000000001f0788>

中删除dput