当前位置: 首页 > 知识库问答 >
问题:

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

郁隐水
2023-03-14

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

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轴更改为整数而不是浮点?频率值为离散计数。


共有2个答案

羿昊英
2023-03-14

您可以创建一个排序器,以便在打印之前对数据帧进行排序。对于整数,可以使用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))
习宸
2023-03-14

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

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

在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))
 类似资料:
  • 我有一个从sql数据库查询派生的直方图。代码如下: 输出如下:https://gyazo.com/d73b20a118db0088aab261c079613b00 我想显示为:https://gyazo.com/063990cd8741682f45b5a37ba594ff56 其中,x轴的编号向右侧移动了一点。有可能做到这一点吗?

  • 我想使用Matplotlib绘制一个带有非均匀x轴的直方图。例如,考虑下面的直方图: 第一个箱子的密度很高,所以我想放大。 理想情况下,我想将x轴中的值更改为,保持图中的箱宽度不变(当然不是数字)。有没有简单的方法来实现这一点?欢迎任何意见或建议。

  • 我的Python脚本里有这个 它产生了一个像这样的图表 正如你所看到的,x标签被切断了,这不是我没有完全扩展图形,我已经尝试过了,它仍然被切断。我怎样才能在图表上得到整个标签? 谢啦

  • 我已经想出了如何用以下代码片段(数周,放在xAxis中的代码)更改下面的工作日标签(T、W、T等): 现有示例:https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/gantt/demo/resource-management

  • 我创建了一个图,它显示了一组数据和直方图。让我困扰的是,如下所示,直方图上的X轴有一个20步,因此最后一个值是140,而不是150,这严重触发了我的强迫症。有人能帮我修理它吗? 生成的png文件: https://i.stack.imgur.com/NhBYM.png 以及守则的有关部分: 非常感谢。

  • 以下是postgres 9.1数据库的一些SQL示例: 这是我的python脚本: 有没有办法防止标签相互重叠?理想情况下是以自动方式,因为我无法预测棒的数量。