matplotlib 基于分位数的python扇形图

zaqlnxep  于 2022-11-15  发布在  Python
关注(0)|答案(2)|浏览(140)

我想在类似的图中可视化我的数据,以便数据区间从最暗的第50个百分位数到最亮的第10个百分位数和最亮的第90个百分位数。
我已经计算了时间序列的分位数,并将其保存在 Dataframe 中
我想要一个像这样的图像。

我可以做一个像这样的图表,但不是一样的

我的 Dataframe 如下所示

Time | pct0.1 | pct0.2 | pct0.3 | pct0.4 | pct0.5 | pct0.6 | pct0.7 | pct0.8 | pct0.9
01:00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0
02:00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0
03:00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0
04:00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0
05:00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0
06:00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0
07:00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0
08:00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.4 | 1.2
09:00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 46.2 | 138.6
10:00 | 246.4 | 340.8 | 445.0 | 559.0 | 673.0 | 737.8 | 802.6 | 843.2 | 859.6
11:00 | 429.8 | 620.6 | 777.8 | 901.4 | 1025.0 | 1153.8 | 1282.6 | 1362.8 | 1394.4
12:00 | 559.2 | 840.4 | 1025.8 | 1115.4 | 1205.0 | 1367.8 | 1530.6 | 1630.4 | 1667.2
13:00 | 606.4 | 968.8 | 1154.8 | 1164.4 | 1174.0 | 1351.2 | 1528.4 | 1648.0 | 1710.0
14:00 | 514.4 | 856.8 | 1031.8 | 1039.4 | 1047.0 | 1232.2 | 1417.4 | 1541.2 | 1603.6
15:00 | 386.0 | 620.0 | 760.4 | 807.2 | 854.0 | 1026.8 | 1199.6 | 1309.0 | 1355.0
16:00 | 259.0 | 331.0 | 391.4 | 440.2 | 489.0 | 621.4 | 753.8 | 836.6 | 869.8
17:00 | 87.2 | 100.4 | 110.2 | 116.6 | 123.0 | 174.2 | 225.4 | 252.6 | 255.8
18:00 | 0.4 | 0.8 | 1.6 | 2.8 | 4.0 | 4.0 | 4.0 | 4.0 | 4.0
19:00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0
20:00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0
21:00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0
22:00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0
23:00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0
00:00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0

提前感谢您的帮助

mqkwyuun

mqkwyuun1#

可以使用ax.fill_between()为分位数之间的范围着色:
第一个

pw9qyyiw

pw9qyyiw2#

如果您有原始数据集(在Pandas DataFrame或Series中),您可以使用Seaborn,使用它您甚至不必计算百分位数。

import seaborn as sns

for interval in [10, 20, 30, 40, 50, 60, 70, 80, 90]:
    plot = sns.lineplot(df, estimator="median", errorbar=("pi", interval), color="tab:red")

errorbar="pi"中的"pi"代表 * 百分位间隔 *。您可以在Statistical estimation and error bars中阅读更多有关它的信息。
如果您不想手动计算百分位数,这可能会很有用。

相关问题