2012-07-31 202 views
25

我有一個非常非常艱難的時間,讓x軸看起來對我的圖是正確的。格式化ggplot2中X軸的日期

這裏是我的數據(通過dput()產生):

df <- structure(list(Month = structure(1:12, .Label = c("2011-07-31", "2011-08-31", "2011-09-30", "2011-10-31", "2011-11-30", "2011-12-31", "2012-01-31", "2012-02-29", "2012-03-31", "2012-04-30", "2012-05-31", "2012-06-30"), class = "factor"), AvgVisits = c(6.98655104580674,7.66045407330464, 7.69761337479304, 7.54387561322994, 7.24483848458728, 6.32001400498928, 6.66794871794872, 7.207780853854, 7.60281201431308, 6.70113837397123, 6.57634103019538, 6.75321935568936)), .Names = c("Month","AvgVisits"), row.names = c(NA, -12L), class = "data.frame") 

這裏是我試圖繪製圖表:

ggplot(df, aes(x = Month, y = AvgVisits)) + 
    geom_bar() + 
    theme_bw() + 
    labs(x = "Month", y = "Average Visits per User") 

該圖表工作正常 - 但是,如果我想調整日期的格式,我相信我應該加上: scale_x_date(labels = date_format("%m-%Y"))

我想使它的日期標籤是'MMM-YYYY'

ggplot(df, aes(x = Month, y = AvgVisits)) + 
    geom_bar() + 
    theme_bw() + 
    labs(x = "Month", y = "Average Visits per User") + 
    scale_x_date(labels = date_format("%m-%Y")) 

當我繪製的是,我不斷地得到這個錯誤:

stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.

儘管對geom_linegeom_bar格式研究小時,我無法修復它。任何人都可以解釋我做錯了什麼?

編輯:作爲後續的想法:您可以使用日期作爲因子,還是應該在日期列上使用as.Date

+0

已加載'庫(秤)'? – smillig 2012-07-31 20:31:31

+0

@smillig yes - 'scales'已加載。 – mikebmassey 2012-07-31 20:32:36

回答

32

Can you use date as a factor?

是的,但你可能不應該。

...or should you use as.Date on a date column?

是的。

這讓我們想到這一點:

library(scales) 
df$Month <- as.Date(df$Month) 
ggplot(df, aes(x = Month, y = AvgVisits)) + 
    geom_bar(stat = "identity") + 
    theme_bw() + 
    labs(x = "Month", y = "Average Visits per User") + 
    scale_x_date(labels = date_format("%m-%Y")) 

enter image description here

中,我已經添加stat = "identity"geom_bar電話。

此外,關於binwidth的消息不是錯誤。一個錯誤實際上會在其中說出「錯誤」,並且類似地,警告總是會在其中說出「警告」。否則,它只是一個消息。

+0

現貨。謝謝。我之前沒有見過「stat =」身份「。現在就去研究一下。謝謝。 – mikebmassey 2012-07-31 20:56:12

+0

@mikebmassey用'stat ='identity'記住的基本事情是,如果你正在做柱狀圖,並且你已經彙總了數據,所以你已經有了每個柱的高度,然後使用它。 – joran 2012-07-31 20:57:40

+0

後續行爲與此線圖相關:所以這隻適用於條形圖 - 我只是試圖用'geom_line'插入相同的東西 - 有和沒有'stat =「identity」' - 我得到這個警告'geom_path:每個組只包含一個觀察值。如果我只有1個數據組,爲什麼需要分組才能使其工作?謝謝 – mikebmassey 2012-07-31 21:03:33

19

要顯示個月2017年1月2017年2月等:

scale_x_date(date_breaks = "1 month", date_labels = "%b %Y") 

角度的日期,如果他們佔用太多的空間:

theme(axis.text.x=element_text(angle=60, hjust=1)) 
+1

幾乎發瘋了,試圖找出爲什麼這不起作用。想通了'theme_bw()'覆蓋'theme()'做的任何事情。重新排序,它工作得很好。如果出現這種情況,有人會遇到同樣的問題。 – Ufos 2017-12-03 18:18:17

+1

欣賞你的答案,這有助於我,寫下我的話來表達我的欣賞 – cloudscomputes 2018-01-16 03:36:21