Python ggplot area plot:组的渲染顺序会影响可见性

Python ggplot area plot:组的渲染顺序会影响可见性,python,pandas,ggplot2,Python,Pandas,Ggplot2,我有这个数据框: Hour ENTRIES_hourly_rainy ENTRIES_hourly_not_rainy ENTRIES_hourly_total 0 0 3559751 7248389 10808140 1 1 1606880 3361780 4968660 2

我有这个数据框:

     Hour  ENTRIES_hourly_rainy  ENTRIES_hourly_not_rainy  ENTRIES_hourly_total
0      0               3559751                   7248389              10808140
1      1               1606880                   3361780               4968660
2      2                145719                    282413                428132
3      3                 26804                     54543                 81347
4      4                766333                   1672134               2438467
5      5                379272                    800500               1179772
6      6                 59030                    123764                182794
7      7                140758                    242930                383688
8      8               1950224                   3544500               5494724
9      9               3806660                   7234291              11040951
10    10                477959                    837528               1315487
11    11                235289                    410994                646283
12    12               7787028                  15026342              22813370
13    13               3145361                   6265131               9410492
14    14                388437                    776277               1164714
15    15                149688                    297624                447312
16    16               5735102                  11601840              17336942
17    17               4250723                   8442271              12692994
18    18                564774                   1123973               1688747
19    19                290350                    544482                834832
20    20               8302496                  16203000              24505496
21    21               4452747                   8668253              13121000
22    22                418217                    784093               1202310
23    23                115005                    230668                345673
我使用ggplot在y轴上显示不同的列,并将小时显示为x轴。 问题是第一列的值被隐藏:

print ggplot(aes(x='Hour',ymin=0,ymax='value',fill='variable'),data = entriesPerHourPerRain) +
 geom_area()+theme_matplotlib()
我可以使用alpha来查看它们:

   print ggplot(aes(x='Hour',ymin=0,ymax='value',fill='variable'),data = entriesPerHourPerRain) +

 geom_area(alpha=0.6)+theme_matplotlib()
但我不希望使用alpha,而是希望三个区域都可见。 我试着改变列的顺序,包括:ENTRIES\u hourly\u total、ENTRIES\u hourly\u not\u rainy、ENTRIES\u hourly\u rainy,但似乎没有改变

有人知道如何解决这个问题吗?谢谢大家!

----------更新:------------

按照下面的建议,我尝试在熔化后反转变量的顺序。 我已经将小时分为6组,现在您可以在HourGroupIndex列中看到它们

这是[ENTRIES\u hourly\u Rain,ENTRIES\u hourly\u not\u Rain,ENTRIES\u hourly\u total]的标准情况 entriesPerHourPerRain=pandas.meltentriesPerHourPerRain,id_vars=['HourGroupIndex']

    HourGroupIndex                  variable     value
0                0      ENTRIES_hourly_rainy   5339154
1                1      ENTRIES_hourly_rainy   1345393
2                2      ENTRIES_hourly_rainy   6470132
3                3      ENTRIES_hourly_rainy  11470514
4                4      ENTRIES_hourly_rainy  10840949
5                5      ENTRIES_hourly_rainy  13288465
6                0  ENTRIES_hourly_not_rainy  10947125
7                1  ENTRIES_hourly_not_rainy   2839328
8                2  ENTRIES_hourly_not_rainy  12027313
9                3  ENTRIES_hourly_not_rainy  22365374
10               4  ENTRIES_hourly_not_rainy  21712566
11               5  ENTRIES_hourly_not_rainy  25886014
12               0      ENTRIES_hourly_total  16286279
13               1      ENTRIES_hourly_total   4184721
14               2      ENTRIES_hourly_total  18497445
15               3      ENTRIES_hourly_total  33835888
16               4      ENTRIES_hourly_total  32553515
17               5      ENTRIES_hourly_total  39174479
这是一个有[ENTRIES\u hourly\u total,ENTRIES\u hourly\u Rain,ENTRIES\u hourly\u not\u Rain]的Invered案例:

custom_dict= {'ENTRIES_hourly_rainy':3, 'ENTRIES_hourly_not_rainy':2, 'ENTRIES_hourly_total':1}  
entriesPerHourPerRain['rank'] = entriesPerHourPerRain['variable'].map(custom_dict)    
entriesPerHourPerRain.sort(columns=['rank','HourGroupIndex'],inplace=True)
del entriesPerHourPerRain['rank']
entriesPerHourPerRain=entriesPerHourPerRain.reset_index()
del entriesPerHourPerRain['index']

    HourGroupIndex                  variable     value
0                0      ENTRIES_hourly_total  16286279
1                1      ENTRIES_hourly_total   4184721
2                2      ENTRIES_hourly_total  18497445
3                3      ENTRIES_hourly_total  33835888
4                4      ENTRIES_hourly_total  32553515
5                5      ENTRIES_hourly_total  39174479
6                0  ENTRIES_hourly_not_rainy  10947125
7                1  ENTRIES_hourly_not_rainy   2839328
8                2  ENTRIES_hourly_not_rainy  12027313
9                3  ENTRIES_hourly_not_rainy  22365374
10               4  ENTRIES_hourly_not_rainy  21712566
11               5  ENTRIES_hourly_not_rainy  25886014
12               0      ENTRIES_hourly_rainy   5339154
13               1      ENTRIES_hourly_rainy   1345393
14               2      ENTRIES_hourly_rainy   6470132
15               3      ENTRIES_hourly_rainy  11470514
16               4      ENTRIES_hourly_rainy  10840949
17               5      ENTRIES_hourly_rainy  13288465
但在这两种情况下,我的情节都是一样的

print  ggplot(aes(x='HourGroupIndex',ymin=0,ymax='value',fill='variable'),data = entriesPerHourPerRain) + geom_area(alpha=0.6,position='dodge')+scale_x_continuous(breaks = range(0,6), labels=['0-3','1-7','2-11','3-15','4-19','5-23'])+theme_matplotlib()
看来订单变化不大


您的代码看起来像Python,而不是R,因此这可能没有帮助。我认为ggplot默认值在Python中是不同的。你确实把问题贴上了R标签

在R中:

反转因子级别的顺序,因此现在_rainy是最后绘制的


注意position=dodge的用法。geom_区域中的默认值。。。[in R]是堆叠的,其中y值将是相加的,因此_total的y值将是_rain+_not _rain+_total。您似乎不想这样。

绘图前是否融化了data.frame?您上面发布的示例数据似乎与给定aes映射名称的entriesPerHourPerRain中的数据不匹配。在aes调用中使用文本字符串值也没有多大意义。通常使用符号或带aes_字符串的字符串。您确定这是您实际运行的数据和代码的代表吗?我假设您已经融化了原始数据帧?对变量的因子水平进行重新排序是否有帮助?e、 例如variable=factorvariable,levels variable[cENTRIES\u hourly\u total,ENTRIES\u hourly\u not\u rain,ENTRIES\u hourly\u rain]是的,很抱歉我忘了添加熔体:entriesPerHourPerRain=pandas.meltentiesperhourperrain,id\u vars=['Hour']@AdamKimberley我不太熟悉,它只是改变了列的顺序吗?我手动尝试过,但似乎没有改变。不管怎样,我会用你的手机试试code@jihoward谢谢你的解决方案。请看我的更新!很抱歉用R标记这个问题,我假设python的ggplot非常类似
library(ggplot2)
library(reshape2)
gg <- melt(entriesPerHourPerRain, id="Hour")
ggplot(gg, aes(x=Hour,y=value,fill=variable)) +
  geom_area(position="dodge")
gg$variable <- factor(gg$variable, levels=rev(levels(gg$variable)))
ggplot(gg, aes(x=Hour,y=value,fill=variable)) +
  geom_area(position="dodge")
gg$variable <- factor(gg$variable, levels=rev(levels(gg$variable)))