gpt4 book ai didi

python - 具有堆叠组件的直方图

转载 作者:太空狗 更新时间:2023-10-29 22:30:34 28 4
gpt4 key购买 nike

假设我有一个在过去 90 天里每天都测量的值。我想绘制值的直方图,但我想让查看者轻松查看过去 90 天的某些非重叠子集中的测量值在哪里累积。我想通过将直方图的每个条“分割”成 block 来做到这一点。一 block 用于最早的观测,一 block 用于最近的观测,一 block 用于最近的观测。

这听起来像是 df.plot(kind='bar', stacked=True) 的工作,但我无法正确获取细节。

这是我目前所拥有的:

import numpy as np
import pandas as pd
import seaborn as sbn

np.random.seed(0)

data = pd.DataFrame({'values': np.random.randn(90)})
data['bin'] = pd.cut(data['values'], 15, labels=False)
forhist = pd.DataFrame({'first70': data[:70].groupby('bin').count()['bin'],
'next15': data[70:85].groupby('bin').count()['bin'],
'last5': data[85:].groupby('bin').count()['bin']})

forhist.plot(kind='bar', stacked=True)

这给了我:

poor result

这张图有一些缺点:

  • 金条堆放的顺序错误。 last5 应该在顶部,next15 应该在中间。 IE。它们应该按照 forhist 中列的顺序堆叠。
  • 条之间有水平空间
  • x 轴标有整数,而不是表示 bin 代表的值的东西。我的“第一选择”是将 x 轴标记为与我刚刚运行 data['values'].hist() 时完全相同的标记。我的“第二选择”是让 x 轴标有“bin 名称”,如果我执行 pd.cut(data['values'], 15),我会得到这些名称。在我的代码中,我使用了 labels=False 因为如果我不这样做,它会使用 bin 边缘标签(作为字符串)作为条形标签,并且它会把它们按字母顺序排列顺序,使图形基本上无用。

处理此问题的最佳方法是什么?到目前为止,我觉得我使用的功能非常笨拙。

最佳答案

好的,这是一种攻击它的方法,使用 matplotlib hist 函数本身的特性:

fig, ax = plt.subplots(1, 1, figsize=(9, 5))
ax.hist([data.ix[low:high, 'values'] for low, high in [(0, 70), (70, 85), (85, 90)]],
bins=15,
stacked=True,
rwidth=1.0,
label=['first70', 'next15', 'last5'])
ax.legend()

给出:

better

关于python - 具有堆叠组件的直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22226375/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com