8on*_*ne6 7 python matplotlib pandas seaborn
假设我有一个我过去90天每天测量的值.我想绘制值的直方图,但我希望观察者能够轻松查看测量在过去90天的某些非重叠子集上累积的位置.我想通过将直方图的每个条"细分"成块来实现这一点.最早观察的一个块,一个用于最近的观察,一个用于最近的观察.
这听起来像是一份工作,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)
Run Code Online (Sandbox Code Playgroud)
这给了我:
该图有一些缺点:
last5
应该在顶部和next15
中间.即它们应该按照列的顺序堆叠forhist
.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()
Run Code Online (Sandbox Code Playgroud)
这使:
归档时间: |
|
查看次数: |
5395 次 |
最近记录: |