【发布时间】:2021-01-27 21:53:49
【问题描述】:
我正在尝试使用 matplotlib 通过循环遍历数据框中的类别并根据字典分配条形颜色来制作堆叠直方图。
我在调用ax1.hist() 时收到此错误。我应该如何解决它?
AttributeError: 'numpy.ndarray' object has no attribute 'hist'
可重现的示例
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
%matplotlib inline
plt.style.use('seaborn-whitegrid')
y = [1,5,9,2,4,2,5,6,1]
cat = ['A','B','B','B','A','B','B','B','B']
df = pd.DataFrame(list(zip(y,cat)), columns =['y', 'cat'])
fig, axes = plt.subplots(3,3, figsize=(5,5), constrained_layout=True)
fig.suptitle('Histograms')
ax1 = axes[0]
mycolorsdict = {'A':'magenta', 'B':'blue'}
for key, batch in df.groupby(['cat']):
ax1.hist(batch.y, label=key, color=mycolorsdict[key],
density=False, cumulative=False, edgecolor='black',
orientation='horizontal', stacked=True)
更新了,还是不行
这很接近,但没有堆叠(应该看到 y=5 的堆叠);我想可能是因为循环?
mycolorsdict = {'A':'magenta', 'B':'blue'}
for ii, ax in enumerate(axes.flat):
for key, batch in df.groupby(['cat']):
ax.hist(batch.y,
label=key, color=mycolorsdict[key],density=False, edgecolor='black',
cumulative=False, orientation='horizontal', stacked=True)
【问题讨论】:
-
第二个版本改成
ax.hist()。 -
@Mr.T 非常接近,谢谢 - 我仍然无法让堆叠工作(问题已更新),我认为可能是第二个循环的问题。没有第二个循环有更好的方法吗?
标签: python matplotlib histogram