簡體   English   中英

R - ggplot2時間序列x軸顯示月份的最后一天

[英]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或月末的實際日期。 但相反,它顯示了下個月的第一天。
我試圖搜索這個但找不到適用的解決方案。

謝謝。

也許最簡單的解決方案就是使用breaks而不是date_breaks ,直接引用數據date_breaks的日期列。

df %>% 
  ggplot(aes(x = date, y = count))+
  geom_line()+
  scale_x_date(date_labels = '%m/%d', breaks = df$date)

在此輸入圖像描述

刪除date_breaks並添加breaks = df$date似乎可以提供所需的結果。

df <- data.frame(date = as.POSIXct(date), count = count)
df %>% 
  ggplot(aes(x = date, y = count)) +
  geom_line() +
  scale_x_datetime(breaks = df$date, date_labels = '%m/%d') 

在此輸入圖像描述

你和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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM