【问题标题】:R bar chart: Some values are not represented in stacked bar chartR条形图:某些值未在堆积条形图中表示
【发布时间】:2018-06-28 12:19:37
【问题描述】:

我在这个特定的问题上修修补补了好几个小时,其中一些随机值由于某种原因在我的堆积条形图中没有表示。

我检查了异常情况和格式 - 但找不到任何解释为什么会出现此问题...

我的数据如下所示

    year   A P    B P     A R   B R
1  2005 443.0  268.4 10952.1 289.9
2  2006 216.5   76.6 18403.4 123.9
3  2007 181.4  232.5  1739.9 317.4
4  2008 148.5   50.0   284.9 226.8
5  2009 449.6  136.9   459.2  70.8
6  2010 190.6  383.7   638.2 147.6
7  2011 151.0  307.0  1133.0 177.4
8  2012  22.5  199.5    52.8  71.0
9  2013 956.0  393.8   637.6  47.1
10 2014 892.0  189.5   899.8  50.7
11 2015 340.8  242.4   782.4  40.6
12 2016 187.8 1262.2  3272.0 121.5

然后我“融化”数据并将其分组:

m_ML <- melt(ML, id = "year")
m_ML$groups <- stri_extract_last_words(m_ML$variable)

并创建了一个好看的图(除了缺失的数据):

MLT <- ggplot(m_ML, aes(x= year, y= value, group= groups, fill= variable)) + 
        geom_bar(stat="identity",position="dodge") + 
        theme_economist() + scale_colour_economist() + 
        coord_cartesian(ylim = c(0, 5000))

结果是这样的: Plot

如您所见,该图似乎有效,除了由于某种原因缺少数据,尽管数据在这里并且应该也显示出来。 (例如 2007、2010、2011、2012 和 2016 年缺少值“A R”)

尝试按比例缩小它,因此必须显示最低值也不起作用。

如果有人能就这个问题对我进行教育,我将非常高兴!

【问题讨论】:

    标签: r ggplot2 geom-bar


    【解决方案1】:

    您正在绘制条形图。缺少的条位于其他条的后面。

    看:

    ggplot(m_ML, aes(x= factor(year), y= value, group= groups, fill= variable)) + 
      geom_bar(stat="identity",position="dodge", col = 1, alpha = 0.2) + 
      coord_cartesian(ylim = c(0, 5000))
    

    一种解决方案是堆叠:

    ggplot(m_ML, aes(x= groups, y= value, group= groups, fill= variable)) + 
      geom_col() +
      facet_grid(~year, switch = 'x') +
      coord_cartesian(ylim = c(0, 5000)) +
      theme(strip.background = element_blank(), axis.text.x = element_blank(), axis.ticks.x = element_blank())
    

    或者只是简单的分组:

    ggplot(m_ML, aes(x= factor(year), y= value, fill= variable)) + 
      geom_col(position = 'dodge') +
      coord_cartesian(ylim = c(0, 5000))
    

    【讨论】:

    • 如果我告诉你我爱你,那就太轻描淡写了!谢谢你一千遍!您能否向我解释为什么“堆叠”没有像我想象的那样工作? (即同一组的值将相互叠加)干杯!
    • @Somedude,如果不清楚,是 position = "dodge" 参数使条形并排显示。
    • 是的,将position 设置为闪避会关闭堆叠。你不能同时做这两件事,即你不能躲过堆栈。
    • 谢谢!我想知道我怎么会错过它。再次感谢您的帮助!
    猜你喜欢
    • 2019-07-15
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2018-11-30
    • 2021-10-28
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多