如何创建一个双轴条形图?

时间:2019-08-22 22:10:55

标签: r ggplot2 lattice

考虑这个简单的例子

library(lubridate)
library(lattice)
library(latticeExtra)
library(tibble)
library(dplyr)

mydf <- tibble(time = c(ymd('2019-01-01'),
                        ymd('2019-01-02'),
                        ymd('2019-01-03'),
                        ymd('2019-01-04'),
                        ymd('2019-01-05')),
       var1 = c(2,2,2,2,1),
       var2 = c(2,1,1,4,5),
       var3 = c(200, 200, 400, 500, 230)) 

现在可以使用

p1 <- mydf %>% 
  barchart(var1 + var2 ~ time, 
           data = ., 
           stack = TRUE,
           horiz = FALSE,
           par.settings = simpleTheme(col = c('red', 'blue'),
                                      fill = c('red', 'blue'),
                                      alpha = c(0.2)),
           auto.key = TRUE)

enter image description here

这也很好

p2 <- mydf %>% 
  xyplot(var3 ~ time, data = ., type = 'l')

enter image description here

但是,将它们与latticeExtra::doubleYscale()结合使用是行不通的。该行不可见(见下文)

latticeExtra::doubleYScale(p1, p2, use.style = FALSE)

奇怪的是,对偶y刻度在那里,但是该行丢失了。有什么想法吗?

谢谢!

enter image description here

2 个答案:

答案 0 :(得分:1)

使用ggplot2,您可以执行以下操作:

useQuery

Plot using ggplot2, with two y-axis

答案 1 :(得分:1)

我简化了您的数据。

使用as.layer(也来自latticeExtra)而不是doubleYScale

library(lattice)
library(latticeExtra)      

  mydf <- data.frame(t=1:5,x=c(2,2,2,2,1),
             y=c(2,1,1,4,5),z=c(200,200,400,500,230))

    p1 <- barchart(x+y~t,mydf,stack=TRUE,horiz=FALSE,
       par.settings = simpleTheme(col = c('red', 'blue'),
                                           fill = c('red', 'blue'),
                                           alpha = c(0.2)),
                auto.key = TRUE)

    p2 <- xyplot(z~t,mydf,type="l")

    p1+as.layer(p2,x.same=TRUE,y.same=FALSE,outside=TRUE)

我相信它也适用于润滑的物体和小物件。

编辑:要弄清as.layer也在latticeExtra包中并添加图解。

bar chart plus xyplot