首页 文章

如何绘制堆积条形图,其中每个条形图中的顺序基于列,每个级别的颜色基于另一个?

提问于
浏览
3

我正在尝试绘制一个堆积条,其中级别的顺序由列定义,颜色由另一个定义 .

我读了一个csv文件,数据框有以下几列:

  • 方法(字符)

  • 属性(字符)

  • 订单(整数)

  • 成功(双精度):成功是轴"y",方法是轴"x" .

Data

我的数据框的一个子集是:

Method <- c("MF", "MF", "MF", "MF", "MF", "MF", "RF", "RF", "RF", "RF", "RF", "RF")
Property <- c("P1","P2","P3","P6","P5","P7","P1","P6","P2","P5","P4","P7") 
Order <- c(1,2,3,4,5,6,1,2,3,4,5,6)
Success <- c(87.612,4.583,0.286,6.122,0.788,0.573,87.612,6.409,4.332,0.895,0.0,0.573)

REF01 <- data.frame(Method, Property, Order, Success)

成功是Order列之后的增量列 . 例如,前3个属性(P1,P6和P2)的方法RF的成功是(87.612 6.409 4.332) .

Desired Result

我需要根据Order列为每个方法堆叠Success,但我想根据Property列进行着色 . 我在Excel中手动绘制了我想要看到的这个小例子 .

下图显示蓝色(P1)是两种方法的第一个属性 . 每种方法的第二个属性不同 . P2(棕色)是MF的第二个,RF是第三个,而P6(黄色)是RF的第二个,MF是第四个 . 因此,MFbar颜色如下:蓝色,棕色,灰色(RF,黄色和深蓝色中不存在的属性.RF条颜色如下:蓝色,黄色,棕色,蓝色和绿色)

Excel Graph Demo

有没有办法策划这个?我感谢您的帮助 .

我也忘了写我正在使用 ggplot2 ,但我知道代码很简单 .

p <- ggplot(REF01, aes(x=Method, y=Success)) +  
       geom_bar(aes(fill = Property) , stat = "identity")

2 回答

  • 0

    您可以使用 group 美学来控制堆叠顺序为shown in this answer .

    ggplot(df, aes(x = Method, y = Success, group = Order)) +  
        geom_col(aes(fill = Property) )
    

    请注意堆叠条的默认顺序是从上到下 . 要反转,我们可以使用 position = position_stack(reverse = TRUE) .

    ggplot(df, aes(x = Method, y = Success, group = Order)) +  
        geom_col(aes(fill = Property), position = position_stack(reverse = TRUE) )
    

    enter image description here

  • 0

    因为您需要为每组Method更改Property的因子级别排序,请考虑使用Method组迭代构建条形图 geom_bar() . 您可以使用 by 按列对数据框进行子集设置 . 下面将原始输出与调整后的输出进行比较,您可以在其中看到MF和RF交换颜色 .

    Original

    # FULL DATASET PLOT
    ggplot(REF01, aes(x=Method, y=Success, fill=Property)) +  
      geom_bar(stat = "identity"
    

    Original Plot Output

    Adjusted Output

    # ORDER DATAFRAME BY METHOD AND ORDER
    REF01 <- with(REF01, REF01[order(Method,Order),])
    
    # ITERATIVELY REMOVE DEFAULT ORDER BY NAME AND RETURN LIST OF geom_bar
    bar_list <-  by(REF01, REF01$Method, function(sub) {
        sub <- within(sub, 
                      Property <- factor(Property, 
                                         levels=unique(Property),
                                         ordered=FALSE))
        geom_bar(stat = "identity", data=sub)        
    })
    
    # PLOT WITH LIST
    ggplot(sub, aes(x=Method, y=Success, fill=Property)) + 
      bar_list
    

    Adjusted Plot Output

    此外,如果您希望使用与底部的第一个项目相同的Excel设置,请在 factor 的级别调用中使用反向矢量方法 rev ,所有这些仍在 by 内:

    sub <- within(sub, 
                  Property <- factor(Property, 
                                     levels=rev(unique(Property)),
                                     ordered=FALSE))
    

    Adjusted Plot Output with Reversal

相关问题