首页 > 解决方案 > R 中的条形图有问题?

问题描述

这个想法来自这个(在ggplot2中组合条形图和折线图(双轴))。这是我正在使用的代码

     #Data generation
     Month1 <- c(201812,20191,20192,20193,20194,20195,20196,
       20197,20198,20199,201910,201911,201912,20201
       ,20202,20203,20204,20205,20206,20207
       ,20208,20209,202010,202011)
     annualjobgrowth<- c(44400,46000,42600,40500,42800,40500,36000,
                        34000,32300,29900,21900,24500,21000,
                        23300,16000,-6200,-275600,-249500,-149200,
                        -136500,-129900,-122800,-113900,-109500)
        Rate <- 
       c(3.3,3.4,3.1,3.0,3.1,2.9,2.6,2.5,2.3,2.1,1.6,1.7,1.5,1.7,1.1,-0.4,
      -19.5,-17.6,-10.5,-9.6,-9.1,-8.6,-8.0,-7.7)
       cesyoy <- data.frame(Month1,annualjobgrowth, Rate)

      #Chart
      library(ggplot2)
      firstces<-ggplot(cesyoy)  + 
      geom_bar(aes(x=Month1, y=annualjobgrowth),stat="identity", fill="tan1", 
      colour="sienna3")+
      geom_line(aes(x=Month1, y=Rate),stat="identity")+
      geom_text(aes(label=Rate, x=Month1, y=Rate), colour="black")+
      geom_text(aes(label=annualjobgrowth, x=Month1, y=0.9*annualjobgrowth), 
      colour="black")
      ggsave("firstces.png")

预期结果是一个包含 24 个独立条的条形图。每一个都测量上面提供的年度就业增长。结果是没有酒吧之一。为了让它正确解释这些数据,我将在 geom_bar 部分中包含什么?

标签: rggplot2

解决方案


你的Month1变量是数字的。如果您将其更改为日期,您将使用其余代码获得预期结果。由于annualjobgrowth和的比例Rate非常不同,您可以使用辅助轴并缩放数据以将两者放入同一个图中。它仍然很拥挤,但你明白了。

 
Month1 <- c(201812,20191,20192,20193,20194,20195,20196,
            20197,20198,20199,201910,201911,201912,20201
            ,20202,20203,20204,20205,20206,20207
            ,20208,20209,202010,202011)
annualjobgrowth<- c(44400,46000,42600,40500,42800,40500,36000,
                    34000,32300,29900,21900,24500,21000,
                    23300,16000,-6200,-275600,-249500,-149200,
                    -136500,-129900,-122800,-113900,-109500)
Rate <- 
  c(3.3,3.4,3.1,3.0,3.1,2.9,2.6,2.5,2.3,2.1,1.6,1.7,1.5,1.7,1.1,-0.4,
    -19.5,-17.6,-10.5,-9.6,-9.1,-8.6,-8.0,-7.7)
cesyoy <- data.frame(Month1,annualjobgrowth, Rate)
cesyoy$Month1 <- as.Date(sub("(....)(.*)", "\\1-\\2-01", Month1))

#Chart
library(ggplot2)
coeff <- 3e4 # pick some scaling coefficient
firstces <- ggplot(cesyoy, aes(x=Month1))  + 
  geom_bar(aes(y=annualjobgrowth),stat="identity", fill="tan1",
           colour="sienna3")+
  geom_line(aes(y=Rate*coeff),stat="identity")+
  geom_text(aes(label=Rate, x=Month1, y=Rate*coeff), colour="black")+
  geom_text(aes(label=annualjobgrowth, x=Month1, y=0.9*annualjobgrowth), 
            colour="black") +
  scale_y_continuous(name = "Annual Job Growth",
    sec.axis = sec_axis(~./coeff, name="Rate")
  )
firstces

reprex 包(v0.3.0)于 2020 年 12 月 23 日创建


推荐阅读