簡體   English   中英

使用連續 x 軸的帶有面板數據的 ggplot

[英]ggplot with panel data using a continuous x-axis

我想制作面板數據圖。 我將面板數據包含在 dput() 中。 我遇到的問題如下。 我希望每個日期都用 ggplot 顯示在 x 軸上,而不是像往常一樣顯示估計值。 因此我使用:

    ggplot(data = industry_risk_exposure_covid, aes(x=Quarter, y=Risk_exposure)) +
      geom_line(aes(colour=industry)) + 
      scale_x_continuous(labels = as.character(Quarter), breaks=Quarter) + 

然而,顯然它遇到了 x 軸的問題,因為 x 軸是面板數據,因此重復它的值。 我該如何解決這個問題?

    structure(list(Quarter = c(2019.3, 2019.4, 2020.1, 2020.2, 2020.3, 
    2020.4, 2021.1, 2019.3, 2019.4, 2020.1, 2020.2, 2020.3, 2020.4, 
    2021.1, 2019.3, 2019.4, 2020.1, 2020.2, 2020.3, 2020.4, 2021.1
    ), Risk_exposure = c(0.931366310178586, 0.790048218420605, 0.926209779967134, 
    0.948074080058149, 0.977557012231547, 0.798212439797712, 1.37986128229538, 
    0.643837908999298, 0.589151809903988, 0.560347370890284, 0.610139698052225, 
    0.594840529383872, 0.625698251450734, 0.647346199698159, 0.672295261900964, 
    0.661018891645603, 1.12339028625562, 0.882948576808631, 0.706404636299307, 
    0.929349206317779, 0.574016070848228), industry = c("Retail", 
    "Retail", "Retail", "Retail", "Retail", "Retail", "Retail", "Consumer services", 
    "Consumer services", "Consumer services", "Consumer services", 
    "Consumer services", "Consumer services", "Consumer services", 
    "Food beverage Tabacco", "Food beverage Tabacco", "Food beverage Tabacco", 
    "Food beverage Tabacco", "Food beverage Tabacco", "Food beverage Tabacco", 
    "Food beverage Tabacco")), class = "data.frame", row.names = c(NA, 
    -21L))

這里有兩個選項:

  1. Quarter更改為character 這需要一些預處理以及將group=添加到geom_line

     transform(industry_risk_exposure_covid, Quarter = as.character(Quarter)) |> ggplot(aes(x=Quarter, y=Risk_exposure)) + geom_line(aes(colour=industry, group=industry)) + scale_color_manual(values = c("darkred", "steelblue", "green")) + geom_vline(xintercept = 2020.1, linetype="dashed", color = "red") + theme(axis.text.x = element_text(angle = 30, vjust = 0.5))

    x軸的ggplot2更改為字符串

    分類軸標簽的順序由字符串的字典(字母)順序或因子內的水平控制。 我們有字符串,幸運的是字符串自然地直觀地排序,所以我們不需要弄亂factor s(盡管它們同樣有效)。

  2. 擴展:分解年份和季度:

     transform(industry_risk_exposure_covid, Quarter = as.character(Quarter)) |> ggplot(aes(x=Quarter, y=Risk_exposure)) + geom_line(aes(colour=industry, group=industry)) + scale_color_manual(values = c("darkred", "steelblue", "green")) + geom_vline(xintercept = 2020.1, linetype="dashed", color = "red") + # theme(axis.text.x = element_text(angle = 30, vjust = 0.5)) + scale_x_discrete(labels = function(z) ifelse(grepl("1$", z), sub("\\.", "\n", z), sub(".*\\.", "\n", z)))

    帶有多級標簽的ggplot2

    請注意,我注釋掉了標簽的角度; 那是因為我推斷釣魚是由於它們的數量/間距。 這不是必需的,無論哪種方式都不是問題。

    它們的順序仍然是安全的,因為在我們生成標簽之前我們實際上並沒有修改Quarter值,此時它們的順序是預先確定的。

    可以選擇將它們左對齊(以便“2020”的“2”超過季度數,而不是“2020”居中)通過使用

    + theme(axis.text.x = element_text(hjust = 0.1))

暫無
暫無

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

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