python 是否更改Pandas / Matplotlib直方图中标签的x轴顺序?

ttygqcqt  于 2023-05-16  发布在  Python
关注(0)|答案(2)|浏览(215)

假设我有一个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轴更改为整数而不是浮点数?**频率值为离散计数。

7d7tgy0s

7d7tgy0s1#

您可以使用value_countsloc定义顺序,并使用bar绘图:

my_df['mycolumn'].value_counts().loc[['C', 'A', 'B']].plot.bar()

要在x轴上使用整数,请添加:

ax.yaxis.set_major_locator(MaxNLocator(integer=True))

whlutmcx

whlutmcx2#

您可以创建一个sorter dict,以便在打印之前对 Dataframe 进行排序。对于整数,可以使用MaxNLocator

import pandas as pd
from matplotlib.ticker import MaxNLocator
fig, ax = plt.subplots()
data = ['A']*2 + ['C']*3 + ['B']* 1
my_df = pd.DataFrame({'mycolumn': data})
sorter = dict([(k, v) for (v,k) in enumerate(['C', 'A', 'B'])])
(my_df.assign(sorter=my_df['mycolumn'].map(sorter))
      .sort_values('sorter')['mycolumn'].value_counts().plot.bar(ax=ax))
ax.yaxis.set_major_locator(MaxNLocator(integer=True))

相关问题