簡體   English   中英

R:使用 ggplot2 更改時間序列分析的 x 軸

[英]R: Change x-axis of a time series analysis with ggplot2

我有幾年的數據,想 plot 年內的變化。 從 1 月到 12 月的全年圖表運行良好。 現在我只想關注幾個月(7 月到 12 月)。 如何更改 x 軸? 由於 x 軸的格式為“日期”,我無法弄清楚它是如何工作的。 我已經嘗試過“scale_x_datetime”和“scale_x_continuous”,但總是出錯。

我的數據如下所示(示例):

values                   Date  
3108013109920            2016-12-25 
3108434522236            2016-08-03
5426634673322            2017-01-07 
6133906789675            2018-11-27 
3679575645687            2018-04-08 
3363868796745            2019-05-23 

到目前為止,這是我的代碼:

cbPalette <- c("#000000", "#ff9208", "#2adfff", "#00d202", "#ffec16", "#f40300", "#384aff", "#8f0066")

p <- df %>% 
  # make datetime: force unique year
  mutate(datetime = lubridate::make_datetime(2017, month, day)) %>% 
  
  ggplot() +
  geom_line(aes(x = datetime, y = values, color = factor(year)), lwd = 1) +
  scale_x_datetime(breaks = lubridate::make_datetime(2017,1:12), labels = month.abb) +
  scale_colour_manual(values=cbPalette) +

  labs(colour = "Year", x = "Date", y = "Number of water pixels") +
  theme_bw() +
  theme(axis.text=element_text(size=12),
        axis.title=element_text(size=15)) +
  theme(axis.title.x = element_text(vjust=-0.8),
        axis.title.y = element_text(vjust=3),
        axis.text.y = element_text(angle = 90, vjust = 1.5, hjust = 0.5)) +
  theme(legend.title = element_text(size=15),
        legend.text = element_text(size=12))

p

代碼創建了這個 plot,我想放大紅色矩形。

繪圖示例

我們可以使用您的繪圖代碼創建帶有一些虛構數據(見下文)的 plot:

p <- df %>% 
  mutate(datetime = make_datetime(2017, month, day)) %>% 
  ggplot() +
  geom_line(aes(x = datetime, y = values, color = factor(year)), lwd = 1) +
  scale_colour_manual(values = cbPalette) +
  labs(colour = "Year", x = "Date", y = "Number of water pixels") +
  theme_bw() +
  theme(axis.text    = element_text(size = 12),
        axis.title   = element_text(size = 15),
        axis.title.x = element_text(vjust = -0.8),
        axis.title.y = element_text(vjust =3 ),
        axis.text.y  = element_text(angle = 90, vjust = 1.5, hjust = 0.5),
        legend.title = element_text(size = 15),
        legend.text  = element_text(size  =12))

使用您的scale_x_datetime ,我們可以看到這類似於您自己的 plot:

p + scale_x_datetime(breaks = make_datetime(2017,1:12), labels = month.abb) 

要放大,我們需要為此比例添加limits

p + scale_x_datetime(breaks = make_datetime(2017,1:12), 
                     labels = month.abb, 
                     limits = make_datetime(2017, c(7, 12)))

使用reprex v2.0.2創建於 2022-09-04


使用的數據

library(tidyverse)
library(lubridate)

set.seed(1)
df <- data.frame(date = seq(as.Date("2015-01-01"), by = "15 day", length = 195),
                 values = rpois(195, 2) * runif(195, 10000, 180000)) %>% 
  mutate(day = day(date), year = year(date), month = month(date))

cbPalette <- c("#000000", "#ff9208", "#2adfff", "#00d202", "#ffec16",
               "#f40300", "#384aff", "#8f0066")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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