我有一个带有多列的pandas
DataFrame
,我想为每列绘制histogram
。我想有一个单独的直方图,并在绘制完成后将所有直方图放在一行中。
这是我的尝试:
fig, ax = plt.subplots(nrows=1, ncols=4, figsize=(20,5))
n_cols = ['a', 'b', 'c', 'd']
colors = ['#800000','#3C91E6','#59C9A5','#9BE564']
counter = 0
for j in range(4):
n, bins, patches = plt.hist(df[n_cols[counter]],
bins=50,
facecolor = '#2ab0ff',
edgecolor='#169acf',
linewidth=0.5, ax=ax[j])
n = n.astype('int') # it MUST be integer#
for i in range(len(patches)):
patches[i].set_facecolor(plt.cm.viridis(n[i]/max(n)))
# Make one bin stand out
patches[47].set_fc('red') # Set color
patches[47].set_alpha(1) # Set opacity
counter+=1
fig.suptitle('distributions', fontsize=18)
我得到一个inner() got multiple values for argument ax
但是,一个情节运作良好,没有任何问题。哪一个是循环中的部分:
Matplotlib的plot()
不像pandas/seaborn那样采用ax
参数。Matplotlib使用ax[j].plot()
而不是plt.plot(ax=ax[j])
:
n, bins, patches = ax[j].hist(df[n_cols[counter]],
bins=50,
facecolor = '#2ab0ff',
edgecolor='#169acf',
linewidth=0.5)