【发布时间】:2021-04-18 21:07:18
【问题描述】:
假设我有一个 Pandas 数据框,列中有离散值。
import pandas as pd
data = ['A']*2 + ['C']*3 + ['B']* 1
print(data)
# ['A', 'A', 'C', 'C', 'C', 'B']
my_df = pd.DataFrame({'mycolumn': data})
print(my_df)
# mycolumn
# 0 A
# 1 A
# 2 C
# 3 C
# 4 C
# 5 B
然后我创建一个直方图来显示这些值的频率。我使用的是 Pandas 内置函数hist(),它又依赖于 Matplotlib 直方图函数。
my_df.mycolumn.hist()
现在,如何将 X 轴上的标签顺序更改为具有特定顺序? 例如,我希望 x 轴具有特定顺序的标签: C, A, B,而不是如图所示的 A, C, B。
另外,如何将 y 轴更改为整数而不是浮点数?频率值是离散计数。
【问题讨论】:
-
您需要创建条形图,而不是直方图。
-
对于您的新问题:matplotlib restrict to integer tick locations。
from matplotlib.ticker import MaxNLocator;plt.gca().yaxis.set_major_locator(MaxNLocator(integer=True)) -
除了显示的答案之外,您还可以使用
pandas.Categorical将mycolumn指定为分类,您可以在其中设置顺序。 -
如前所述,这实际上是带有
count的条形图,而不是直方图。有关示例,请参阅此 question。有两个答案,我为那个 OP 给出的一个显示了一个分布(正如操作所希望的那样),另一个答案显示了出现次数,就像你正在做的那样。我认为这两个答案将为您说明差异。 -
主要问题归结为您的数据是分类数据而不是数字数据。
hist的 API 不能有效地bin类别,所以你只有一个条形图。例如,如果您要将所有字母映射到数字,您会看到histapi 如何对数字组进行分类以显示分布。
标签: python pandas matplotlib