【问题标题】:Grouped bar plot column width uneven due to no data由于没有数据,分组条形图列宽不均匀
【发布时间】:2018-10-31 04:50:52
【问题描述】:

我正在尝试为我的数据集显示分组条形图,但是,由于某些月份没有数据(没有收入),列宽显示为不相等,我希望无论是否有相同的列宽一些州没有收入。请注意条形图是如何为 1 月分组的,尽管其他州没有收入(如果某些州没有任何收入,我希望将它们隔开)。任何帮助将不胜感激,谢谢。

library(ggplot2)
plot = ggplot(Checkouts, aes(fill=Checkouts$State, x=Checkouts$Month, y=Checkouts$Income)) + 
geom_bar(colour = "black", stat = "identity") 

My Bar Plot

Checkouts table/data

【问题讨论】:

  • 请将您的数据输出为带有dput(data)的r对象

标签: r


【解决方案1】:

有两种方法可以做到这一点。

  1. 如果您使用的是最新版本的ggplot2(我相信是2.2.1),函数position_dodge 中有一个名为preserve 的参数,它保留垂直位置并仅调整水平位置。这是它的代码。

代码:

import(ggplot2)
plot = ggplot(Checkouts, aes(fill=Checkouts$State, x=Checkouts$Month, y=Checkouts$Income)) + 
geom_bar(colour = "black", stat = "identity", position = position_dodge(preserve = 'single'))
  1. 另一种方法是预先计算并为每个缺失的行添加虚拟行。使用table 是最好的解决方案。

【讨论】:

    【解决方案2】:

    您正在寻找 position_dodge2(preserve = "single")(https://ggplot2.tidyverse.org/reference/position_dodge.html)。

    library(ggplot2)
    plot = ggplot(Checkouts, aes(fill = State, x = Month, y= Income)) + 
      geom_bar(colour = "black", stat = "identity", 
               position = position_dodge2(preserve = "single")) 
    

    此外,您不需要在 ggplot() 中使用 $ 指定数据框的列。例如,Checkouts$State 可以替换为 State。

    【讨论】:

    • Travis 成功了,非常感谢,也感谢您对数据框的小提示 :)
    猜你喜欢
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多