![](/img/trans.png)
[英]R ggplot2: “scale_x_time” - labels on x-axis shift from 1st to last day of month
[英]R - ggplot2 time series x-axis to show last day of the month
為什么ggplot會一直給我一個月的第一天,然后繪制一個時間序列。
以下是我的代碼示例:
library(ggplot2)
library(dplyr)
date <- as.Date(c("2008-01-31",
"2008-02-29",
"2008-03-31",
"2008-04-30",
"2008-05-31"))
count <- sample(5)
df <- data.frame(date = date, count = count)
df %>%
ggplot(aes(x = date, y = count))+
geom_line()+
scale_x_date(date_breaks = "1 month",
date_labels = '%m/%d')
我希望x軸顯示df
或月末的實際日期。 但相反,它顯示了下個月的第一天。
我試圖搜索這個但找不到適用的解決方案。
謝謝。
你和ggplot
正在考慮不同的日期。
你正在考慮標簽之類的日期。 在您的示例中,您有5個要按順序繪制的內容,這些標簽應顯示在軸上。
ggplot
正在考慮日期之類的日期。 如果你只給它值2和5,因為它們是數字,它會添加它們之間的所有點,例如2.5,3,4等。既然你給了日期,它也會把所有日期都包含在中間。 。
軸標簽偏離軸的范圍,與變量無關。 它將日期放在正確的位置,但隨后選擇軸標簽本身。
這有兩個選擇
1。
如果您想堅持使用數據類型“日期”,請將date_break
選項與breaks
交換,並指定所需的范圍。 例如
scale_x_date(breaks = seq(min(date),max(date),by="month"),
date_labels = '%m/%d')
2。
如果您確實希望這些是標簽(例如,您不希望在這些日期之間放置任何點),請考慮將date
作為一個因素並僅繪制它。
date <- factor(c("2008-01-31",
"2008-02-29",
"2008-03-31",
"2008-04-30",
"2008-05-31"))
count <- sample(5)
df <- data.frame(date = date, count = count)
df %>%
ggplot(aes(x = as.numeric(date), y = count))+
geom_line() +
scale_x_continuous(labels=format(as.Date(date), "%m/%d"))
在aes
參數中圍繞日期包裝as.numeric
將因子轉換為數字(因此它將在它之間繪制一條線),然后我們只需要將標簽設置為我們想要的標簽,這需要將其轉換為日期然后將其格式化為月/日。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.