【问题标题】:Creating a grouped bar chart创建分组条形图
【发布时间】:2020-05-22 17:27:41
【问题描述】:

我对 R 很陌生,所以如果简化解释会很有帮助。

一段时间以来,我一直在努力在 R 中创建分组条形图。我想在我的 x 轴上有几个月的时间。我希望条形图也按两个变量分组。

这是我目前尝试过的代码:

library(reshape2)
library(ggplot2)
Months2 <- c('January','February','March','April','May','June','July','August','September','October','November','December')
Qantas <- c(18775,16560,21093,16101,15948,18864,17252,16770,21082,16692,15795,21782)
Ideal <- c(16591,21570,20579,16048,14372,15269,18266,17488,16284,17794,18880,23600)

# reshaping into longdata
InboundQantaslong <- melt(InboundQantas, id=c("Month"))

# make the plot
ggplot(InboundQantaslong) +
  geom_bar(aes(x = Months2, y = value, fill = variable), 
           stat="identity", position = "dodge", width = 0.7) +
  scale_fill_manual("Number\n", values = c("red","blue"), 
                    labels = c(" Ideal", " Qantas")) +
  labs(x="\nMonth",y="Number\n") +
  theme_bw(base_size = 14)

这会返回错误

手动刻度中的值不足。需要 15 个,但只提供了 2 个。

我该如何解决这个问题?

【问题讨论】:

    标签: r bar-chart


    【解决方案1】:

    您可以像这样更正您的代码

    library(reshape2)
    library(ggplot2)
    
    InboundQantas <- cbind.data.frame(Months2,Qantas,Ideal)
    
    # reshaping into longdata
    InboundQantaslong <- melt(InboundQantas, id=c("Months2"))
    InboundQantaslong$Months2 <- factor(InboundQantaslong$Months2, levels = c("January", "February", "March", "April", "May", "June", "July", "August", "September","October","November","December"))
    
    ggplot(InboundQantaslong, aes(x = Months2, y = value, fill = variable)) +
      geom_bar(stat="identity", position = "dodge", width = 0.7) +
      scale_fill_manual("Number\n", values = c("red","blue"), 
                        labels = c(" Ideal", " Qantas")) +
      labs(x="\nMonth",y="Number\n") +
      theme_bw(base_size = 14)
    

    或使用tidyverse,其中melt 替换为pivot_longer 之类的

    InboundQantas$Months2 <- factor(InboundQantas$Months2, levels = c("January", "February", "March", "April", "May", "June", "July", "August", "September","October","November","December"))
    
    InboundQantas %>% pivot_longer(-Months2, names_to = "variable", values_to = "value") %>% 
      ggplot(aes(x = Months2, y = value, fill = variable)) +
      geom_bar(stat="identity", position = "dodge", width = 0.7) +
      scale_fill_manual("Number\n", values = c("red","blue"), 
                        labels = c(" Ideal", " Qantas")) +
      labs(x="\nMonth",y="Number\n") +
      theme_bw(base_size = 14)
    

    【讨论】:

    • 非常感谢!它有效,但现在我有另一个问题.. x 轴月份按字母顺序列出,而不是从 1 月到 12 月,它们相互重叠?有没有办法解决这个问题?
    • 查看我的更新。如果您使用的是 RStudio,请单击 Zoom 以重叠名称或单击 Export\Save as PDF\Orientation as Landscape\Save。
    猜你喜欢
    • 2018-05-27
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多