Rstudio重新排序堆叠ggplot geom_bar [英] Rstudio reorder stacked ggplot geom_bar

查看:1105
本文介绍了Rstudio重新排序堆叠ggplot geom_bar的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我在@Axeman的帮助下制作了一个堆叠的Barplot。到目前为止这么好..现在我很乐意将红色情节与蓝色情节交换。我已经从字面上尝试了所有使用ggplot中的顺序函数,并且我无法正确理解它。这是剧情:





请注意,由于您的狡猾示例数据集,我必须使用 abs(值)。请查看如何使R可重现例如?,以了解如何在未来提出问题。


So I've made a stacked Barplot with help of @Axeman . So far so good.. Now I would love to swap the Blue plot with the Red plot. I've literally tried everything using the order function in ggplot and I cant get it right. Here is the Plot:

Stacked barplot

Below, you can find an extract of the dataframe that was used for this plot (first row containts the header). Basically its a division name, followed by two types of savings (Repetitive and MDF) and the the last column contains the sum of both (NewRepetitive + Anrechenbare_MDF)

    "DivisionName", "NewRepetitive", "Anrechenbare_MDF", "Total_CR"
    "Electrification Products" 0 0 0
    "Electrification Products" 39.762 0 39.762
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 1641.348852 0 1641.348852
    "Electrification Products" 6367.725252 0 6367.725252
    "Electrification Products" 24299.24741 0 24299.24741
    "Electrification Products" 32910.87486 0 32910.87486
    "Electrification Products" 8637.313704 0 8637.313704
    "Electrification Products" 9220.489704 0 9220.489704
    "Electrification Products" -1038.609948 0 -1038.609948
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 6346.518852 0 6346.518852
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 4675.189452 0 4675.189452
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 0 0 0
    "Electrification Products" 8495.893524 0 8495.893524
    "Power Grids" 0 0 0
    "Power Grids" 0 0 0
    "Power Grids" 0 0 0
    "Power Grids" 2439.849336 0 2439.849336
    "Power Grids" 0 0 0
    "Power Grids" -3909.837222 0 -3909.837222
    "Power Grids" 0 0 0
    "Power Grids" 0 0 0
    "Power Grids" 0 0 0
    "Power Grids" 0 0 0
    "Power Grids" -974.473842 0 -974.473842
    "Power Grids" 0 0 0
    "Power Grids" 0 0 0
    "Power Grids" -448.740678 0 -448.740678
    "Power Grids" -886.997442 0 -886.997442
    "Power Grids" 0 0 0
    "Power Grids" 0 0 0
    "Power Grids" 263.767854 0 263.767854
    "Power Grids" -28.4961 0 -28.4961
    "Power Grids" 122.00307 0 122.00307
    "Power Grids" 0 0 0
    "Power Grids" 0 0 0
    "Power Grids" 0 0 0
    "Power Grids" 3910.778256 0 3910.778256
    "Power Grids" 0 0 0
    "Power Grids" -1246.87005 0 -1246.87005
    "Power Grids" 0 0 0
    "Power Grids" 0 0 0
    "Power Grids" -61.047924 0 -61.047924
    "Power Grids" -61.047924 0 -61.047924
    "Power Grids" 0 0 0
    "Power Grids" -6.348666 0 -6.348666
    "Power Grids" -12.697332 0 -12.697332
    "Power Grids" 0 0 0
    "Power Grids" 0 0 0
    "Power Grids" 0 0 0
    "Power Grids" 0 0 0
    "Power Grids" -240.798672 0 -240.798672
    "Power Grids" 0 0 0
    "Power Grids" -65.395236 0 -65.395236
    "Power Grids" 24.678948 0 24.678948
    "Power Grids" 0 0 0
    "Power Grids" 0 0 0
    "Power Grids" 0 0 0
    "Power Grids" 215.669088 0 215.669088
    "Power Grids" -61.047924 0 -61.047924
    "Power Grids" 14.605908 0 14.605908
    "Power Grids" -42.61161 0 -42.61161
    "Power Grids" -553.540056 0 -553.540056
    "Power Grids" 0 0 0
    "Power Grids" 113.507256 0 113.507256
    "Power Grids" -21.365448 0 -21.365448
    "Power Grids" 0 0 0
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 603.25581 0 603.25581
    "Power Grids" -61.047924 0 -61.047924
    "Power Grids" 0 0 0
    "Power Grids" -224.429982 0 -224.429982
    "Power Grids" 0 0 0
    "Power Grids" 44.904552 0 44.904552
    "Power Grids" -240.798672 0 -240.798672
    "Power Grids" 0 0 0
    "Power Grids" -361.198008 0 -361.198008
    "Power Grids" 0 0 0
    "Power Grids" -240.798672 0 -240.798672
    "Power Grids" -115.349562 0 -115.349562
    "Power Grids" 0 0 0
    "Power Grids" 263.767854 0 263.767854
    "Power Grids" -1948.93443 0 -1948.93443
    "Power Grids" 16.36869 0 16.36869
    "Power Grids" 111.280584 0 111.280584
    "Power Grids" 924.254436 0 924.254436
    "Power Grids" -1122.136656 0 -1122.136656
    "Power Grids" 0 0 0
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 5.977554 0 5.977554
    "Power Grids" 0 0 0
    "Electrification Products" 5542.133592 -559.362777 4982.770815
    "Electrification Products" 3038.638548 -260.690669 2777.947879
    "Electrification Products" 2507.378466 -279.681388 2227.697078
    "Electrification Products" -2241.940608 -334.661491 -2576.602099
    "Electrification Products" -4535.744118 -931.275287 -5467.019405
    "Electrification Products" 808.003602 -156.175362 651.82824
    "Electrification Products" 958.873884 -209.163422 749.710462
    "Electrification Products" -830.588418 -144.621569 -975.209987
    "Electrification Products" -999.404616 -184.794228 -1184.198844
    "Electrification Products" 342.112248 -225.099694 117.012554
    "Electrification Products" -237.193584 -92.629517 -329.823101
    "Electrification Products" 238.572 -236.653473 1.918527
    "Electrification Products" 145.674714 -71.925657 73.749057
    "Electrification Products" 0 -40.637464 -40.637464
    "Electrification Products" -437.382 -111.553826 -548.935826
    "Electrification Products" 1852.074198 -643.426551 1208.647647
    "Electrification Products" 1318.680222 -290.106352 1028.57387
    "Electrification Products" 395.89698 -81.009327 314.887653
    "Electrification Products" 314.106546 -118.725138 195.381408
    "Electrification Products" -711.580752 -277.88855 -989.469302
    "Electrification Products" -897.22953 -196.215213 -1093.444743
    "Electrification Products" 228.074832 -150.066454 78.008378
    "Electrification Products" -657.517686 -188.844696 -846.362382
    "Electrification Products" -986.269902 -283.267038 -1269.53694
    "Electrification Products" -474.638994 -99.203216 -573.84221
    "Electrification Products" -711.951864 -148.804831 -860.756695
    "Electrification Products" 286.577988 -66.863233 219.714755

Here is the R-Code that was used to edit the dataframe the right way (using tidyr package), so I could make the stacked barplot, since ggplot needs the data in a specific form.

  library(ggplot2)
  library(tidyr) 

  pd <- gather(stack, 'key', 'value', -DivisionName)
  pd <- pd[pd$key != 'Total_CR', ]

And finally the ggplot code:

ggplot(pd, aes(DivisionName,  value, fill = key)) +
  geom_bar(stat = "summary", fun.y = "sum") +
  scale_fill_discrete(name="Saving-Typen",labels=c("MDF-Savings","Repetitive Savings")) +
  ylab("Total Savings") +  scale_y_continuous(breaks=c(seq(0,15000000,1000000)), expand = c(0,0))

The barplot looks exactly how I want it to, except the order.. I need to have the MDF Savings above of Repetitive-Savings. I'm sitting here for 5 hours and can't get the right solution.. I've tried everything with the "order" option.

Can someone help me?

解决方案

The problem is not in your plot code, but in the data frame pd. You have pd$key as a character vector instead of a factor. Convert this to a factor with the correct ordering, and ggplot will do the rest for you.

After

pd <- gather(stack, 'key', 'value', -DivisionName)
pd <- pd[pd$key != 'Total_CR', ]

You do:

pd$key <- factor(pd$key,
                 levels = c("NewRepetitive",
                            "Anrechenbare_MDF"))

Don't forget to change your labels again to match the correct values.

ggplot(pd, aes(DivisionName,  abs(value), fill = key)) +
  geom_bar(stat = "summary", fun.y = "sum") +
  scale_fill_discrete(name="Saving-Typen",labels=c("Repetitive Savings","MDF_Savings")) +
  ylab("Total Savings") +  scale_y_continuous(breaks=c(seq(0,15000000,1000000)), expand = c(0,0))

gives

Note that I had to use abs(value) due to your dodgy example dataset. Please take a look at How to make a great R reproducible example? to get an idea of how to ask a question in the future.

这篇关于Rstudio重新排序堆叠ggplot geom_bar的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆