簡體   English   中英

我如何在我的 x 軸上連續兩年獲得 plot ISO 周數?

[英]How do I plot ISO week numbers from two contiguous years in my x axis?

我有一個 data.frame 是 2022 年和 2023 年的前 4 周和前 4 周。我希望創建一個條形圖 plot,其中我的 x 軸顯示 2022 年的最后幾周和 2023 年的前幾周。但是, ggplot 自動對周數進行升序排序。 我正在尋找指示計算機到 plot 周 49,50,51,52 第一和 1,2,3,4 第二。 下面一組虛擬數據來解釋我正在處理的問題。

df.demo <- data.frame(year = c(2022,2022,2022,2022,2023,2023,2023,2023), week = as.integer(49,50,51,52,1,2,3,4), y = c(10,11,12,13,20,21,22,23))

ggplot(df.demo, aes(x=week, y=y))+ geom_col()

產生這個 plot:

在此處輸入圖像描述

我知道我可以通過繪制“周”作為一個因素來刪除所有其他周,但這仍然不能解決我的安排問題。

關於用於繪制 x 軸的變量排列的類似問題得到了回答。

我正在避免手動解決方法,想看看是否有人有更實用的解決方案。 我嘗試瀏覽 Lubridate 功能,但如果我 plot 實際日期,我只能獲得我想要的顯示。 不適用於 ISO 周數。 我在想我可以讓 ggplot 獲取顯示的年份和周數,同時只顯示周數嗎? 在我們的行業中,我們通過周數來討論和衡量產出,這就是為什么我更願意保留此顯示。

一種方法:

library(ggplot2)
library(lubridate)

df.demo <- 
  df.demo |>
  mutate(year = as_date(paste0(year,"-01-01")),
         xpos = year + as.duration(paste(week, 'weeks'))
         )

df.demo |>
  ggplot(aes(xpos, y, week)) +
  geom_col(aes(xpos, y)) +
  scale_x_date(breaks = df.demo$xpos, date_labels = '%W / %y') +
  labs(x = 'week')

一年中每周的酒吧

還沒有發現,為什么我必須為scale_x_date(breaks =...)提供df.demo$xpos而不是只提供xpos 有什么建議么?

您可以添加一個重新排序的因素,按年份重新排序

df.demo %>% 
    mutate(order = fct_reorder(as.factor(week), year)) %>% 
    ggplot(aes(x=order, y=y))+ 
    geom_col()

在此處輸入圖像描述

暫無
暫無

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

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