【问题标题】:Making a stacked area plot using ggplot2使用 ggplot2 绘制堆积面积图
【发布时间】:2011-01-10 20:56:27
【问题描述】:

我正在使用以下数据结构来尝试制作堆积面积图:

df <- data.frame(PopDen = c( 0.002279892, 0.002885407, 0.004291351, 0.002457731, 0.006631572, 0.007578882, 0.004465446, 0.007436628, 0.009001456, 0.006951703, 0.003602076, 0.005695585, 0.005819783, 0.007412274, 0.004931548, 0.006257411, 0.008635908, 0.005438558, 0.002251421,0.006438558), DomArea = c( 253500, 135270, 197180, 131590, 142210, 166920, 125640, 184600, 139940, 126280, 127760, 190940, 133440, 143510, 117260, 69340, 143620, 127480, 181970,164180), PR_Cat = c( "High", "High", "Low", "Low", "Low", "Low", "Low", "Low", "High", "High", "Medium", "Medium", "Medium", "Low", "Low", "Medium", "Medium", "Low", "Low","Low") )

p <- ggplot(df, aes(PopDen, order(DomArea), colour = PR_Cat))  
p + geom_area(aes(colour = PR_Cat, fill= PR_Cat), position = 'stack')

但是,我不明白如何将这些区域堆叠在一起;目前它们正在重叠。我假设我在这里需要一个position = 'stack' 参数,但无论是否包含它,情节看起来都一样。

另外,是否可以按PR_Cat 中的类别之一订购DomArea,或者我需要重新组织我的数据吗?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我不确定您在此处绘制什么,但您不想沿 y 轴而不是 x 轴绘制 PopDen 吗?您可以使用plyr 包中的ddply 按每个PR_Cat 类别订购DomArea,然后堆叠工作如下: 编辑 我意识到您可能希望情节按Low, Medium High 的顺序堆叠,因此我们首先需要通过执行以下操作强制在PR_Cat 因素上进行此排序:

    df$PR_Cat <- ordered( df$PR_Cat, levels = c('Low', 'Medium', 'High'))
    

    现在使用ddply 创建DomAreaByCat 列:

    df <- ddply(df, .(PR_Cat), transform, DomAreaByCat = order(DomArea))
    

    您的df 将如下所示:

    > df
            PopDen DomArea PR_Cat DomAreaByCat
    1  0.004291351  197180    Low            8
    2  0.002457731  131590    Low            5
    3  0.006631572  142210    Low            9
    4  0.007578882  166920    Low            2
    5  0.004465446  125640    Low            3
    6  0.007436628  184600    Low            7
    7  0.007412274  143510    Low           11
    8  0.004931548  117260    Low            4
    9  0.005438558  127480    Low           10
    10 0.002251421  181970    Low            6
    11 0.006438558  164180    Low            1
    12 0.003602076  127760 Medium            4
    13 0.005695585  190940 Medium            1
    14 0.005819783  133440 Medium            3
    15 0.006257411   69340 Medium            5
    16 0.008635908  143620 Medium            2
    17 0.002279892  253500   High            4
    18 0.002885407  135270   High            2
    19 0.009001456  139940   High            3
    20 0.006951703  126280   High            1
    

    然后你可以像这样绘制堆积面积图:

    p <- ggplot(df, aes( DomAreaByCat, PopDen))
    
    p + geom_area(aes(colour = PR_Cat, fill= PR_Cat), position = 'stack')   
    

    【讨论】:

    • 感谢您的明确解释。不过,我仍然不确定两件事;为什么要绘制 DomAreaByCat? (我试过这个,但它看起来与我最初的尝试相似)。不能绘制 DomArea 吗?我遇到的第二个问题是我的完整数据集被归一化为 1(3 个类别的总和);然而,当绘制时,它会超过 1 (imgur.com/1C5Cp) 我无法想象排序会改变这些值,但我看不出它是如何发生的。
    • @celenius - 事实证明我的 x 轴值不是唯一的,这导致了一些堆叠。当我使用完全唯一的值时,它工作得很好。
    • 上述方法(您的结构)确实有效。不过我对 DomAreaByCat 的功能还是有点不清楚,我选择使用原始变量 DomArea 并按该变量对数据集进行排序。
    • 我可能不明白 DomArea 编号是什么,我认为它们应该在每个类别中排序,但这可能是错误的。如果你能大致指出这些变量的含义,我会有一个更好的主意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    相关资源
    最近更新 更多