我的数据可以看作是一个时间序列。对于
t=0
,有一些数据 x0
,然后对于 t=1
,有一些数据 x1
,等等。我正在尝试使用 sns.histplot
here 创建一个 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
,更合理的 binwidth 为 10,这会将 3.4; 10.2; 5.2
分组到一个 bin 中,将 100.13; 108.13
分组到不同的 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
一起使用。不同的图书馆很好。如有任何帮助,我们将不胜感激。
编辑:我希望这能澄清这个问题。这是我目前拥有的情节: 忽略有次要情节的事实。如果您查看 ant,您可以看到沿 y 轴的 bin 都是相同的(大约 1-2,然后 2-3 等),并且每列(沿 x 轴的每个值)它们都是相同的。我希望每个
x
都有不同的垃圾箱。我希望这能让问题更加清楚。如果没有,请告诉我。
直方图用于显示数据点的分布,就您的情况而言,您的图中显然有太多箱。要纠正此问题,请设置
bins
的数量并使用 binwidth
更改垃圾箱的宽度,例如
sns.histplot(df, x = 'time', y = 'value', bins = 35, binwidth = 5)