Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何创建双轴条形图?_R_Ggplot2_Lattice - Fatal编程技术网

R 如何创建双轴条形图?

R 如何创建双轴条形图?,r,ggplot2,lattice,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'),

考虑这个简单的例子

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)) 
奇怪的是,双y刻度在那里,但线不见了。有什么想法吗

谢谢


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

library(tidyr)
library(ggplot2)

df1 <- mydf %>% 
  select(-var3) %>% 
  pivot_longer(
    cols = c(var1, var2), 
    names_to = "type",
    values_to = "value"
  )

df2 <- mydf %>% 
  select(time, var3)

ggplot(df1) +
  geom_col(aes(x = time, y = value, fill = type)) +
  geom_line(data = df2, aes(x = time, y = var3/100), size = 2) +
  ylab("var1, var2") +
  scale_y_continuous(sec.axis = sec_axis(~.*100, name = "var3"))
library(tidyr)
图书馆(GG2)
df1%
选择(-var3)%>%
再长一点(
cols=c(var1,var2),
name_to=“type”,
值\u to=“值”
)
df2%
选择(时间,变量3)
ggplot(df1)+
几何坐标(aes(x=时间,y=值,填充=类型))+
geom_线(数据=df2,aes(x=时间,y=var3/100),尺寸=2)+
ylab(“var1,var2”)+
比例y连续(秒轴=秒轴(~*100,name=“var3”))

我简化了你的数据

使用
as.layer
(也来自
latticeCextra
)而不是
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)
库(晶格)
图书馆(latticeExtra)

mydf朋友,你必须停止使用lattice,JK:D lattice是很棒的朋友。ggplot很好,但有一些疯狂的限制(双轴),我觉得它像个bug。如果我删除
horiz=FALSE
我可以得到两个图来显示(几乎),但是,条形图将失真。撇开玩笑不谈,在我看来,
lattice
没有得到很好的维护,而且我在使用它时遇到了各种各样的错误。我和你在GGTHO的双轴限制上,这很烦人。你可以用一些黑客的方法(贴在SO上)绕过它。我个人会时不时地使用这种黑客解决方案,而不是总是处理bug。干杯。关于限制的原因,请看这篇文章:啊,请停止这些论点。地球上的每个领域都使用双Y轴…很酷的东西!你能把这张图表拿出来吗?供将来参考。不需要停止使用格子。我明白了。由于alpha=0.2,它很微弱。如果你看不到那条线,试试看p2,可能是你的显示器或类似的东西。如果您增加
alpha
,可能
doubleYScale
对您有效。
latticeExtra::doubleYScale(p1, p2, use.style = FALSE)
library(tidyr)
library(ggplot2)

df1 <- mydf %>% 
  select(-var3) %>% 
  pivot_longer(
    cols = c(var1, var2), 
    names_to = "type",
    values_to = "value"
  )

df2 <- mydf %>% 
  select(time, var3)

ggplot(df1) +
  geom_col(aes(x = time, y = value, fill = type)) +
  geom_line(data = df2, aes(x = time, y = var3/100), size = 2) +
  ylab("var1, var2") +
  scale_y_continuous(sec.axis = sec_axis(~.*100, name = "var3"))
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)