簡體   English   中英

用兩個不同的 y 軸(不同時間段)和 x 軸(不同比例)重疊 R ggplots

[英]Overlapping R ggplots with two different y axis (different time period) and x axis (different scale)

我目前有兩個不同的數據集,每個數據集有兩列(日期和值)。 基本上,這兩個數據集的不同之處在於它們出現在不同的時間段(y 軸),我可以說相隔大約 20 年,而 x 軸(值)的比率約為 1:10。 這里的目標是,由於它們發生在不同的時間段,有沒有辦法讓我使用 ggplot 覆蓋這兩個圖,並將兩個不同的 y 軸(不同的時間段)放在上面,另一個放在下面,即說其中一個數據集是 1994-2002 年,第二個數據集是 2017-2020 年。 原因是因為它們都表現出相同的模式,我希望將它們放在一起以清楚地表現出模式。 附上此類圖表的示例。

在此處輸入圖片說明

這是非常可行的。 對於 ggplot2,您可以通過簡單的變換輕松添加輔助軸。 我將使用 EuStockMarkets 數據作為示例。

library(ggplot2)
library(dplyr)
library(tidyr)

rm(list=ls())
data(EuStockMarkets)
StockMarkets <- EuStockMarkets[, c("DAX","FTSE")]

plot(StockMarkets, plot.type="single", col=c(2,3), 
     main="European Stock Markets (1991 - 1998)", 
     ylab="Closing price (value)")
legend("topleft", inset=0.02,  legend=colnames(StockMarkets), 
         lwd=2, lty=1, col=c(2,3))

你會得到一個像這樣的好情節:

歐洲股市

ggplot2 版本也很簡單:

StockMarkets %>%
  as.data.frame() %>%
  mutate(sDate=as.Date(seq(1,1860,1), origin="1991-05-10")) %>%
  pivot_longer(-sDate) %>%
  ggplot(aes(x=sDate, y=value, color=name)) +
  geom_line()

現在假設富時是 20 年前。 我將手動更改日期,以便您可以看到結果。

DAX <- tibble(Stock=as.vector(EuStockMarkets[,c("DAX")])) %>%
   mutate(stDate=as.Date(seq(1,1860,1), origin="1991-05-10"), name="DAX")

FTSE <- tibble(Stock=as.vector(EuStockMarkets[,c("FTSE")])) %>%
  mutate(stDate=as.Date(seq(1,1860,1), origin="1971-05-10"), name="FTSE")

現在將它們組合成一個數據框。 想象一下,您從這些數據開始。 想象一下它有納斯達克和比特幣,而不是富時和 DAX。

DAX_FTSE <- bind_rows(DAX, FTSE)

如果您嘗試繪制此數據,您會得到以下內容,這是正確的,但不是 OP 想要的:

DAX_FTSE %>%
  ggplot(aes(x=stDate, y=Stock, color=name)) +
  geom_line()

在此處輸入圖片說明

這里的技巧是添加一個帶有簡單變換的輔助軸:

DAX_FTSE %>%
  mutate(st2Date=if_else(name=="FTSE", stDate+20*365.25, stDate)) %>%
  ggplot(aes(x=st2Date, y=Stock, color=name)) +
  geom_line() + xlab(label="DAX") +
  scale_x_date("DAX", sec.axis=sec_axis(~ . -20*365.25, name="FTSE"))

在此處輸入圖片說明

暫無
暫無

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

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