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

Python 是否更改Pandas/Matplotlib直方图中标签的x轴顺序?,python,pandas,matplotlib,Python,Pandas,Matplotlib,假设我有一个列中有离散值的数据帧 作为pd进口熊猫 数据=['A']*2+['C']*3+['B']*1 打印数据 ['A','A','C','C','C','B'] my_df=pd.DataFrame{'mycolumn':data} printmy_df 菌柱 0 A 1A 2 C 3 C 4 C 5 B 然后我创建一个直方图,显示这些值的频率。我使用Pandas内置函数hist,它反过来又依赖于Matplotlib直方图函数 my_df.mycolumn.hist() 现在,如何更改X

假设我有一个列中有离散值的数据帧

作为pd进口熊猫 数据=['A']*2+['C']*3+['B']*1 打印数据 ['A','A','C','C','C','B'] my_df=pd.DataFrame{'mycolumn':data} printmy_df 菌柱 0 A 1A 2 C 3 C 4 C 5 B 然后我创建一个直方图,显示这些值的频率。我使用Pandas内置函数hist,它反过来又依赖于Matplotlib直方图函数

my_df.mycolumn.hist()
现在,如何更改X轴上标签的顺序以获得特定的顺序?例如,我希望x轴具有特定顺序的标签:C、A、B,而不是如图所示的A、C、B

此外,如何将y轴更改为整数而不是浮点数?频率值是离散计数。

您可以创建一个分类器dict,在打印之前对数据帧进行排序。对于整数,可以使用MaxNLocator:

您可以创建一个分类器dict,以便在打印之前对数据帧进行排序。对于整数,可以使用MaxNLocator:

您可以使用值_计数、loc定义顺序和条形图:

要在y轴上使用整数,请执行以下操作:

from matplotlib.ticker import MaxNLocator

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

ax.yaxis.set_major_locator(MaxNLocator(integer=True))
您可以使用值_计数、loc定义顺序和条形图:

要在y轴上使用整数,请执行以下操作:

from matplotlib.ticker import MaxNLocator

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

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

您需要创建条形图,而不是直方图。对于新问题:。从matplotlib.ticker导入MaxNLocator;plt.gca.yaxis.set_major\u locatorMaxNLocatorinteger=true除了显示的答案外,您还可以将mycolumn指定为Category with,您可以在其中设置顺序。如前所述,这实际上是带有计数的条形图,而不是直方图。看看这个例子。这里有两个答案,一个是我给的,一个是我想要的分布,另一个是你正在做的,一个是出现次数。我认为这两个答案将为您说明差异。主要问题归结为您的数据是分类的,而不是数字的。hist的API不能有效地存储类别,所以您只需要一个条形图。例如,如果要将所有字母映射为数字,您将看到hist api、bins和数字组如何显示分布。您需要创建条形图,而不是直方图。对于新问题:。从matplotlib.ticker导入MaxNLocator;plt.gca.yaxis.set_major\u locatorMaxNLocatorinteger=true除了显示的答案外,您还可以将mycolumn指定为Category with,您可以在其中设置顺序。如前所述,这实际上是带有计数的条形图,而不是直方图。看看这个例子。这里有两个答案,一个是我给的,一个是我想要的分布,另一个是你正在做的,一个是出现次数。我认为这两个答案将为您说明差异。主要问题归结为您的数据是分类的,而不是数字的。hist的API不能有效地存储类别,所以您只需要一个条形图。例如,如果要将所有字母映射到数字,您将看到hist api、bins和数字组如何显示分布。
from matplotlib.ticker import MaxNLocator

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

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