首页 > 解决方案 > 在水平 matplotlib 直方图上显示 x 轴值

问题描述

我想使用 matplotlib 来显示类似于下面的水平直方图:

在此处输入图像描述

下面的代码适用于垂直直方图:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame({'A':['Male'] * 10 + ['Female'] * 5})
plt.hist(df['A'])
plt.show()

在此处输入图像描述

orientation='horizontal'参数使条形变为水平,但破坏了水平比例。

plt.hist(df['A'],orientation='horizontal')

在此处输入图像描述

以下工作,但感觉像很多工作。有没有更好的办法?

fig=plt.figure()
ax=fig.add_subplot(1,1,1)
ax.set_xticks([0,5,10])
ax.set_xticklabels([0,5,10])
ax.set_yticks([0,1])
ax.set_yticklabels(['Male','Female'])
df['A'].hist(ax=ax,orientation='horizontal')
fig.tight_layout()  # Improves appearance a bit.
plt.show()

在此处输入图像描述

标签: matplotlib

解决方案


plt.hist(df['A'])只是巧合。我建议不要plt.hist用于非数字或分类图 - 它并不意味着用于此。

此外,将数据聚合与可视化分开通常是一个好主意。所以,使用熊猫绘图,

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'A':['Male'] * 10 + ['Female'] * 5})
df["A"].value_counts().plot.barh()
plt.show()

或者使用 matplotlib 绘图,

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'A':['Male'] * 10 + ['Female'] * 5})
counts = df["A"].value_counts()
plt.barh(counts.index, counts)
plt.show()

推荐阅读