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)))