matplotlib 如何为2D直方图中的每个离散值传递直方图箱并绘制它

wrrgggsh  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(140)

我的数据可以被看作是一个时间序列。对于t=0,有一些数据x0,然后对于t=1,有一些数据x1,等等。我试图使用这些数据的sns.histplothere for reference创建一个2D直方图。我想沿着y轴计算bin,并为每个t单独传递,但是我不知道如何做到这一点。提供一些代码:

time  value
0     1.2
0     1.3
0     0.4
0     0.3
0     1.34
0     1.31
0     1.36
...   ...
1     3.4
1     10.2
1     5.2
1     100.13
1     108.13
...   ...
n     1.2
n     2.5

我有一个类似的嵌套框,df。注意0.3的binwidth对于t=0来说是很好的,因为它将值0.3; 0.4放在一个bin中,而值1.2; 1.3; 1.34; 1.31; 1.36放在另一个bin中。但是t=1的binwidth不起作用,因为每个值都有自己的bin。相反,对于t=1,一个更合理的更大的bin宽度应该是10,这将把3.4; 10.2; 5.2分组在一个bin中,而把100.13; 108.13分组在不同的bin中。当然,bin不必具有相同的大小,例如0.3或10,但这只是为了说明问题。
目前,代码是sns.histplot(df, x='time', y='value', discrete=(True, False)),但这不是我想要的。我想传递这样的东西:

sns.histplot(df, x='time', y='value', binwidth=(1, (binwidth_t0, binwidth_t1,...,binwidth_n)))

其中,每个t的每个binwidth被独立传递,并且相同的binwidth用于x轴(它是离散的)。
有什么方法可以实现这一点吗?它也不一定是sns.histplot。一个不同的库也可以。任何帮助都是感激的。
编辑:我希望这能澄清这个问题。这是我目前拥有的一个情节:x1c 0d1x忽略子图的事实。如果你看ant,你可以看到沿着y轴的bin都是相同的(大约1-2,然后2-3,等),并且它们对于每列都是相同的(沿x轴沿着的每个值)。我希望每个x都有不同的bin。我希望这能使问题更清楚。如果没有,请让我知道。

uelo1irk

uelo1irk1#

直方图用于显示数据点的分布,在您的情况下,您显然在图中有太多的bin。要纠正这一点,请设置bins的数量并使用binwidth更改bin的宽度,例如。

sns.histplot(df, x = 'time', y = 'value', bins = 35,  binwidth = 5)

相关问题