【问题标题】:Boxplot of CSV data with ggplot2带有 ggplot2 的 CSV 数据的箱线图
【发布时间】:2017-06-29 22:32:18
【问题描述】:

我有一个为期六个月(2016 年 8 月 - 2017 年 1 月)每天称重的 CSV 文件。我想为每个月绘制一个箱线图,基本上绘制每个月数据的 summary() 。我想使用 ggplot2,因为它看起来更漂亮。我四处寻找解决方案,并提出了许多但似乎没有解决我想要的问题。

数据的头部和摘要:

> wts <- read.csv('weights.csv', header=T, sep=',')
> head(wts)
  August.2016 September.2016 October.2016 November.2016 December.2016 January.2016
1       254.2          250.0        248.2         245.8         245.6        244.4
2       252.6          249.2        248.6         246.4         246.0        245.0
3       251.8          250.6        249.2         248.0         246.4        244.3
4       253.2          252.4        249.8         247.5         246.0        243.6
5       252.2          250.6        248.8         247.0         246.0        242.6
6       254.0          251.0        247.8         247.6         246.0        242.0
> summary(wts)
  August.2016    September.2016   October.2016   November.2016   December.2016    January.2016  
 Min.   :249.6   Min.   :245.6   Min.   :245.4   Min.   :244.2   Min.   :243.4   Min.   :241.6  
 1st Qu.:252.2   1st Qu.:248.3   1st Qu.:246.7   1st Qu.:246.2   1st Qu.:244.8   1st Qu.:242.9  
 Median :252.8   Median :249.2   Median :247.8   Median :246.6   Median :245.6   Median :243.6  
 Mean   :252.7   Mean   :249.1   Mean   :247.6   Mean   :246.7   Mean   :245.3   Mean   :243.5  
 3rd Qu.:253.6   3rd Qu.:250.0   3rd Qu.:248.2   3rd Qu.:247.2   3rd Qu.:246.0   3rd Qu.:244.3  
 Max.   :255.2   Max.   :252.4   Max.   :249.8   Max.   :248.6   Max.   :247.0   Max.   :245.0  
                 NA's   :1                       NA's   :1                       NA's   :1  

根据我收集的信息,我需要以 ggplot 喜欢的方式重塑数据,但我不知道该怎么做。如果可能的话,我还想在箱线图上突出显示平均值(带有实际数字)。我能知道怎么做吗?

谢谢

【问题讨论】:

    标签: r ggplot2 boxplot


    【解决方案1】:

    为了保持相同的范式,您可以使用来自tidyr 包的gather() 将您的数据重新整形为长格式,并将结果插入ggplot()。要添加描述均值的文本,您可以将 stat_summary()"text" geom 结合使用,并将 mean 函数应用于 value 变量。

    library(tidyr)
    library(ggplot2)
    
    ggplot(gather(wts, factor_key = TRUE), 
       aes(key, value)) + 
        geom_boxplot() + 
        stat_summary(aes(label = ..y..), 
                     fun.y = function(x) round(mean(x), 2), 
                     geom = "text", 
                     size = 3,
                     color = "red")
    

    【讨论】:

    • 谢谢。我收到有关删除包含非有限值的 3 行的警告。这是否对应于只有 30 天的月份的 NA 值(没有第 31 天)?此外,时间线没有排序。在您的示例中,2016 年 12 月之后是 8 月。有没有我可以使用的有序方法之类的东西?
    • 我弄清楚了顺序。可以使用gather(factor_key = TRUE) 保留订单。我还用平均列权重填充了 NA 数据(在 csv 本身中,而不是在 R 中)。我需要弄清楚如何将平均值四舍五入为两位有效数字。
    • 谢谢! label=..y.. 有什么作用?
    • 这是一个内部变量,这里代表计算的y美学,将被geom_text()继承以显示四舍五入的平均值。
    • 是否可以格式化文本(如将其设为粗体或斜体)?
    猜你喜欢
    • 2017-10-13
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    相关资源
    最近更新 更多