【问题标题】:Trouble with making a Time Series Bar Chart with Ggplot2使用 Ggplot2 制作时间序列条形图的问题
【发布时间】:2020-02-26 15:58:09
【问题描述】:

我一直在努力制作 ggplot2 中每月收集的两种生物的时间序列条形图。当我运行代码时,我最终得到一个没有任何选定 Y 值的图表。我收集数据的方式有问题吗?我应该使用 tidyr 吗?代码如下。谢谢你

library(ggplot2)
myDF <-
data.frame(Month = as.Date(c('2018-07-15','2018-08-08','2019-01-05','2019-02-27', '2019-03-17', '2019-04-21', '2019-05-08', '2019-06-07', '2019-07-29', '2019-08-18', '2019-09-27', '2019-10-27', '2019-11-08')), C.w.= c(19.44, 21.4, 4.5, 0.29, 30.9, 22.95, 5.4, 5.67, 0.2, 0.07, 0, 2.06, 0.39), O.m. = c(0, 0, 27, 14, 13.95, 7, 2.53, 8.96, 3.4, 10.43, 15.76, 5.96, 18.18)) 
ggplot(data = myDF, aes(x = 'Month', y = 'Density per 10 cm Octocoral', fill = 'Species')) + geom_bar(stat = 'identity', position = 'dodge')

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    您尝试绘制数据的方式有几个错误。

    如果我不得不猜测,我会说您忘记告诉我们每列代表不同的物种,但是您正在按物种填充,而您的数据框中没有 Species 列,所以 gglot2 不能猜猜你在说什么。

    所以,如果我是对的并且每一列对应于不同的物种,您需要首先将您的数据框重塑为更长的格式,这里我使用来自tidyr 包的pivot_longer

    所以,y = 'Density per 10 cm Octocoral' 也是错误的,因为我认为它是您想要作为 y 轴的标题。同样,没有此名称引用的列,因此ggplot2 无法制作图表。如果是你要标注的y轴的标题,你必须使用labs(y = ...)ylab(...)

    最后,您不需要括号来将月份分配给 x 轴。因为您分配了要使用的数据框,所以您可以直接写要用作x轴的列的名称。看看我下面的代码。

    DF <- myDF %>% pivot_longer(-Month, names_to = "Species", values_to = "values")
    DF
    
    # A tibble: 26 x 3
       Month      Species values
       <date>     <chr>    <dbl>
     1 2018-07-15 C.w.    19.4  
     2 2018-07-15 O.m.     0    
     3 2018-08-08 C.w.    21.4  
     4 2018-08-08 O.m.     0    
     5 2019-01-05 C.w.     4.5  
     6 2019-01-05 O.m.    27    
     7 2019-02-27 C.w.     0.290
     8 2019-02-27 O.m.    14    
     9 2019-03-17 C.w.    30.9  
    10 2019-03-17 O.m.    14.0  
    # … with 16 more rows
    
    library(ggplot2)
    ggplot(DF,aes(x = Month, y = values, fill = Species))+
      geom_col(position = position_dodge())+
      labs(y = "Density per 10 cm Octocoral")
    

    看起来你想要达到什么目标?


    在我看来,由于您的日期序列有很大的差距,我认为条形图并不合适。我宁愿建议使用geom_line,例如:

      ggplot(DF,aes(x = Month, y = values, color = Species))+
        geom_line()+
        geom_point()+
        labs(y = "Density per 10 cm Octocoral")
    

    【讨论】:

    • 非常感谢您的简洁回答!我也同意线图看起来也更好。我仍在努力专门从包含我的数据的 csv 文件中重塑我的数据。有什么建议么?您是否需要该文件才能查看其组织方式?非常感谢您的帮助!
    • 我认为这是一个不同的问题。您首先需要将文件加载到 R 中并查看它的外观(您可以使用 read.csvread.table 来加载它)。然后,您可以将pivot_longer 应用于您要重塑的列:tidyr.tidyverse.org/reference/pivot_longer.html
    猜你喜欢
    • 1970-01-01
    • 2021-04-24
    • 2021-01-17
    • 2023-03-27
    • 2016-05-06
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    相关资源
    最近更新 更多