使用pandas.plot在python的直方图中自定义x轴的值

问题描述 投票:1回答:1

我想在直方图的x轴上设置自定义值

我的列号为dataframeA,数据范围为0到500

我想绘制具有自定义范围的分布图,例如0-20、20-40、40-60、60-80、80-100和100-500

我的代码看起来像

df['A'].plot(kind='hist', range=[0,500])

这给出了相等的范围,但不是我想要的。

python pandas plot histogram
1个回答
0
投票

您可以尝试np.select将数据分组为所需的组,如下所示。

>>> data = np.random.randint(0,500, size=15)
>>> data
array([ 44, 271, 293, 158, 479, 303,  32,  79, 314, 240,  95, 412, 150,
       356, 376])
>>> np.select([data <= 20, data <= 40, data <= 60, data <= 80, data <= 100, data <= 500], [1,2,3,4,5,6], data)
array([3, 6, 6, 6, 6, 6, 2, 4, 6, 6, 5, 6, 6, 6, 6])

因此您需要像这样向数据框中添加新列

>>> df = pd.DataFrame(np.random.randint(0,500,size=1000), columns = list("A"))
>>> df.head(4)
     A
0  179
1  136
2  114
3  124
>>> df["groups"] = np.select([df.A <= 20, df.A <= 40, df.A <= 60, df.A <= 80, df.A <= 100, df.A <= 500], [1,2,3,4,5,6], df.A)
>>> df.head(4)
     A  groups
0  179       6
1  136       6
2  114       6
3  124       6

然后您可以像这样绘制直方图。

>>> df1 = pd.DataFrame({'count' : df.groups.value_counts(sort=False), 'names' : ["0-20", "20-40", "40-60", "60-80", "80-100", "100-500"]})
>>> df1.plot.bar(x='names', y='count')
<matplotlib.axes._subplots.AxesSubplot object at 0x0000000018CD2808>
>>> plt.show()
© www.soinside.com 2019 - 2024. All rights reserved.