2013-11-14 24 views
2

日期的格式是在GGPLOT2問題當只有2中的數據幀的行:ggplot日期格式數據量小的幀重疊

> dt <- Sys.Date() - 0:1 
> dt 
[1] "2013-11-14" "2013-11-13" 
> vals <- 0:1 
> df <- data.frame(dt, vals) 
> df 
      dt vals 
1 2013-11-14 0 
2 2013-11-13 1 
> class(df[, 1]) 
[1] "Date" 
> class(df[, 2]) 
[1] "integer" 
> g <- ggplot(df, aes(x = dt, y = vals)) + geom_line() 
> plot(g) 

enter image description here

瞭解如何x軸日期標籤漲奇怪的。

然而,這工作得很好:

> dt <- Sys.Date() - 0:9 
> vals <- 0:9 
> df <- data.frame(dt, vals) 
> df 
      dt vals 
1 2013-11-14 0 
2 2013-11-13 1 
3 2013-11-12 2 
4 2013-11-11 3 
5 2013-11-10 4 
6 2013-11-09 5 
7 2013-11-08 6 
8 2013-11-07 7 
9 2013-11-06 8 
10 2013-11-05 9 
> g <- ggplot(df, aes(x = dt, y = vals)) + geom_line() 
> plot(g) 

enter image description here

在壞版本看起來像它的覆蓋小時兩次的東西。我想我可以抑制時間組件(不知何故),但是有沒有辦法避免修改x軸標籤,並仍然適用於小數據框?

+4

這看起來像在'ggplot2'問題。你爲什麼不[提出問題](https://github.com/hadley/ggplot2/issues?state=open)? – krlmlr

+0

有https://github.com/hadley/ggplot2/issues/797這似乎是同樣的問題。 –

+0

這是一個非常有問題的領域,即使這個錯誤看起來很罕見也很孤立,因爲gglot通常做的非常出色。通過rcharts的一些基於瀏覽器的新軟件包也有類似的問題。軸範圍選擇和數字格式化是圖表編程中最棘手的方面之一(任何人使用Excel都很糟糕),而且大多數情況下,基本圖形在大多數情況下都能正確使用。隨着速度的提高,這是一個很大的原因,不要將基本圖形從窗口中挑出來,儘管公平,ggplot2軸訓練對我來說是這個包的巨大好處。 –

回答

1

我會說這是一些錯誤。但解決辦法是添加scale_x_date(),然後使用庫scales中的date_format()根據需要設置標籤。

library(scales) 
ggplot(df, aes(x = dt, y = vals)) + geom_line()+ 
    scale_x_date(labels = date_format("%b %d")) 

enter image description here

+0

工程...但我現在必須確保我不需要多年的X軸。猜測這裏我們去if語句..... –

+0

您可以根據需要製作標籤,例如,這也會包含year scale_x_date(labels = date_format(「%Y%b%d」))。 –

+0

瞭解,但我希望標籤儘可能簡潔,不包括年份,如果只有少量的點數。在xts下的基礎圖形將做到這一點沒有問題。我的圖表範圍從1-2天到2-3年不等,並且它們在運行時發生變化。不是一個問題,少數幾個語句會做你上面說的。謝謝。 –