【问题标题】:R: using dates in bar graph with ggplot2R:在带有 ggplot2 的条形图中使用日期
【发布时间】:2017-04-21 20:22:18
【问题描述】:

我想创建一个条形图,在条形图的 y 轴上显示特定日期的日期条目数,在图表的 x 轴上显示日期。同时,我想将栏分成是和否部分。

Date,Hungry
Friday, March 24, 2017 2:33:46 PM,Yes
Friday, March 24, 2017 3:39:46 PM,No
Friday, March 24, 2017 4:39:46 PM,Yes
Friday, March 24, 2017 5:39:46 PM,No
Friday, March 24, 2017 6:39:46 PM,Yes
Friday, March 24, 2017 7:39:46 PM,Yes
Saturday, March 25, 2017 9:41:00 AM,Yes
Saturday, March 25, 2017 10:41:00 AM,Yes
Saturday, March 25, 2017 11:41:00 AM,No
Saturday, March 25, 2017 13:41:00 AM,No
Saturday, March 25, 2017 14:41:00 AM,No
Saturday, March 25, 2017 15:41:00 AM,Yes
Saturday, March 25, 2017 16:41:00 AM,Yes

总共有 6 个日期条目是 3 月 25 日(3 是/3 否)和 7 个日期条目是 3 月 26 日(4 是/3 否)。生成如下图:

Hungry
 ^
 |
 |
 |
 |
9|
 |              _
 |   _         |n|
 |  |n|        |o|
5|  |o|        |_|
 |  |_|        |y|
 |  |y|        |e|
 |  |e|        |s|
1|__|s|________|_|__________>
                            Date

     2          2            
     4          5            
     M          M            
     A          A
     R          R
     C          C
     H          H

很抱歉提出这个看似简单的问题。

编辑。 Adam Quek 让我通过dput 提供一些数据。这里有几行:

dat <- structure(list(Date = structure(1:4, .Label = c("Friday, March 24, 2017 4:39:46 PM", 
"Friday, March 24, 2017 7:21:33 PM", "Friday, March 24, 2017 7:21:51 PM", 
"Friday, March 24, 2017 7:22:00 PM", "Friday, March 24, 2017 7:22:14 PM", 
"Saturday, March 25, 2017 8:00:10 AM", "Saturday, March 25, 2017 8:00:25 AM", 
"Saturday, March 25, 2017 8:00:46 AM", "Saturday, March 25, 2017 8:01:02 AM", 
"Saturday, March 25, 2017 8:01:20 AM", "Saturday, March 25, 2017 8:01:37 AM", 
"Saturday, March 25, 2017 8:01:50 AM"), class = "factor"), Hungry = structure(c(2L, 
1L, 2L, 1L), .Label = c("No", "Yes"), class = "factor")), .Names = c("Date", 
"Hungry"), row.names = c(NA, 4L), class = "data.frame")

【问题讨论】:

    标签: r date graph ggplot2


    【解决方案1】:

    这是一种快速绘制所需内容的方法。

    library(ggplot2)
    ggplot(dat, aes(date, fill=as.factor(hungry))) + 
          geom_bar()
    

    我将数据重新制作为:

    dat <- structure(list(date = structure(c(17249, 17249, 17249, 17249, 
    17249, 17249, 17250, 17250, 17250, 17250, 17250, 17250, 17250
    ), class = "Date"), hungry = structure(c(2L, 1L, 2L, 1L, 2L, 
    2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L), .Label = c("No", "Yes"), class = "factor")), class = "data.frame", .Names = c("date", 
    "hungry"), row.names = c(NA, -13L))
    

    编辑:

    带有新示例数据的附加输入:

    (i) 在 R 中将日期更改为可读的日期格式。在日期/时间格式上查看 strptime 的 R 帮助文件

    dat$date <- as.Date(dat$Date, "%A, %B %d, %Y %X")
    

    (ii) 与上述类似的 ggplot 绘图。

    ggplot(dat, aes(date, fill=Hungry)) + 
          geom_bar()
    

    【讨论】:

    • 感谢您的回复:-) 您提供的图表正是我正在寻找的,您建议的代码得到了上述“最小工作示例”的预期结果。不幸的是,我无法使用它,因为我有大量数据,我无法以这种方式手动更改它。
    • 您是否能够首先在 R 中读取数据?我无法按原样读取您提供的数据,因为它不是典型的逗号分隔或制表符分隔格式(这就是我必须首先手动输入它们的原因)。也许如果你可以为你的 data.frame 提供一个dput 可能是前十几行或两打行,我可以帮助它运行。
    • 再次感谢您的快速回复。我提取了几行数据集并在问题中添加了dput。希望这是您所要求的。
    • 再次感谢!我不明白的是:在dput dat 中有 3 月 24 日和 25 日。在你的新情节中只有 3 月 24 日。
    • 如果您运行您提供的dput 输出,您将只获得2017-03-24 数据而不是2017-03-25。不会为您解决 dput 的问题,因为我添加的代码现在应该适用于您的完整数据集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2021-03-14
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多