2017-02-11 48 views
0

我每天都有一個重量爲6個月(2016年8月 - 2017年1月)的CSV文件。我想繪製每個月的箱線圖,基本繪製每個月的數據彙總()。我想使用ggplot2,因爲它看起來更漂亮。我爲解決方案而周旋,並提出了許多,但似乎沒有解決我想要的東西。使用ggplot2 CSV數據的盒形圖

數據的頭部和總結:

> 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喜歡這樣的數據,但我不知道該怎麼做。我也想,如果可能的話,突出顯示boxplot上的意思(以實際數字)。我可以想一想如何做到這一點嗎?

感謝

回答

1

要留在同一個模式,你可以使用gather()tidyr包到您的數據重塑成一個長格式,並將結果插入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") 

enter image description here

+0

謝謝。我收到了關於刪除包含非有限值的3行的警告。這是否與僅有30天的月份(沒有第31天)的NA值相對應? 此外,時間軸沒有排序。在你的例子中,2016年12月之後是8月。有沒有像我可以使用的有序方法? – shaun

+1

我想出了排序。訂單可以通過收集來保存(factor_key = TRUE)。我還填寫了平均列重量的NA數據(在csv本身中,而不是在R中)。我需要弄清楚如何將平均值舍入爲兩位有效數字。 – shaun

+0

查看更新@shaun – mtoto