2017-02-28 72 views
0

顯示每斌分級日期我有一個完整的日期和值對的文件。我想按月清點積分,然後顯示一個盒子和鬚鬚圖。我的問題是,我有很多個月的價值數據的,所以我只想顯示x軸標籤一些沒有在x軸上

我的代碼如下所示:

library(ggplot2) 
library(reshape2) 
library(scales) 

data <- read.delim("values.tsv", header=TRUE) 

# Interpret the strings as dates 
data$Date <- as.Date(data$Date, "%Y-%m-%d %H:%M:%S %z") 

# Bin the data by month 
data$Date <- cut(data$Date, breaks="1 month") 

ggplot(data, aes(factor(Date), Temperature)) + 
    geom_boxplot() 

ggsave("output.pdf", width=8, height=6, units="in") 

這裏是適當的格式一些示例數據:跨越40個月

Date Temperature 
2016-09-29 07:16:00 -0500 295.0 
2016-09-30 07:23:00 -0500 295.0 
2016-10-03 10:27:00 -0500 297.8 
2016-10-04 07:27:00 -0500 296.2 
2016-10-26 05:52:00 -0500 294.2 
2016-10-27 06:18:00 -0500 294.2 
2016-10-28 07:41:00 -0500 294.2 
2016-11-27 09:07:00 -0500 293.6 
2016-11-30 08:03:00 -0500 295.0 
2016-12-01 08:12:00 -0500 295.0 
2016-12-02 08:01:00 -0500 293.2 
2016-12-07 08:02:00 -0500 294.6 
2016-12-08 07:50:00 -0500 294.6 
2016-12-09 08:37:00 -0500 293.2 
2016-12-12 08:25:00 -0500 294.4 
2016-12-13 07:47:00 -0500 293.2 
2016-12-14 07:52:00 -0500 294.6 
2017-01-09 07:53:00 -0500 294.0 
2017-01-10 08:26:00 -0500 294.4 
2017-01-11 08:20:00 -0500 294.6 
2017-01-31 08:16:00 -0500 290.6 
2017-02-07 07:59:00 -0500 290.8 
2017-02-08 08:10:00 -0500 290.6 
2017-02-09 08:33:00 -0500 291.2 
2017-02-10 07:57:00 -0500 290.4 
2017-02-13 07:48:00 -0500 290.4 
2017-02-28 08:19:00 -0500 291.8 

實際數據由幾百個數據點。該數據被正確分級,但是當我嘗試通過

scale_x_date(date_breaks="4 months", date_labels="%b '%y") 

添加比例出現錯誤

Error: Invalid input: date_trans works with objects of class Date only

似乎cut輸入日期轉換爲別的弦,我承擔。如何將x軸值轉換回日期,以便我可以將scale_x_date應用於它們?

+0

你有沒有打印之前檢查類'Date'的?但是,我認爲,即使是日期,通過調用'AES(因子(日期)'你的ggplot調用內部將它們變成因素一次。因此,我不認爲'scale_x_date'可以工作。 – lbusett

+0

@LorenzoBusetto是的,如果我離開的是'cut'呼叫然後我就可以成功地使用'scale_x_date'後,我認爲這意味着'Date'確實之前包含日期。 – bdesham

回答

2

問題是cut正在將您的數據轉換爲因子,因此它不再是日期,因此無法應用scale_x_date

我們可以解決此通過創建您的箱線爲期一個月的分組變量,並在您的通話aes分組的意見。

data$Month <- cut(data$Date, breaks="1 month") 

ggplot(data, aes(Date, Temperature, group = Month)) + 
    geom_boxplot() + 
    scale_x_date(date_breaks="4 months", date_labels="%b '%y") 

X仍然是一個日期,但是您的觀察結果是針對該情節分組的。我在上傳圖表時遇到了問題,但根據您的示例數據,我認爲它正常運行。

+0

,完美的工作,謝謝! – bdesham