![](/img/trans.png)
[英][R Shiny]: How to filter by time range on the x-axis and simultaneously have two different variables on the y axis in R Shiny app
[英]Overlapping R ggplots with two different y axis (different time period) and x axis (different scale)
這是非常可行的。 對於 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.