【开发心得】Python+Matplotlib解决X 轴值不按数组排序(已解决)

Python+Matplotlib解决X 轴值不按数组排序最简单的办法

  • 问题描述
  • 解决方案
  • 复制害死人
  • 最终解决

问题描述

看标题就知道了,先上个图给大家
【开发心得】Python+Matplotlib解决X 轴值不按数组排序(已解决)_第1张图片
这个图对应的代码和数据如下,也是网上找到的最初的代码,根据自己的数据进行了略微改动,也是最简单的办法,让你会感觉plt的使用简直是太简单了。
【开发心得】Python+Matplotlib解决X 轴值不按数组排序(已解决)_第2张图片

# 折线图
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
#df = pd.read_excel('quanguojingji10nian.xls')
x=dfGraph['saleArea']
y1=dfGraph['personCount']
plt.plot(x,y1,label='面积与人数')

plt.xlabel('面积(平方米)')
plt.ylabel('90后人数')
plt.title('面积与人数')
plt.legend()
plt.show()

解决方案

上图中,问题在于X轴的数据顺序不对,原因是plt在显示数据的时候,自己按照顺序进行重新排序,结果造成“50-100”这个数值排到了最后,造成了图形很奇怪。有一个办法就是把X轴的数值定义按照ASCII的顺序,但是由于X轴数据是自动动态读取的,靠手工是不可靠的。
经过几度查询,找到以下这篇文章:
Python之Matplotlib 解决绘图 X 轴值不按数组排序问题
这篇文章写的还是不错,至少知道了思路,但是这篇文章有一点不明白,就是这句:

# 自定义 x轴 的取值:
plt.xticks(arange(len(colums_x)),colums_x)

用了以后语法始终报错,说没有定义,网上竟然没有找到类似的问题,难道是我的python版本问题吗?

复制害死人

有时候,复制粘贴的便利性造成了程序员的不动脑筋,上面说的那篇文章,在各个地方都能搜到,也不知道到底哪个网站的才是原创!问题关键是用的都是arange!
后来阴差阳错的把arange改成了range,语法竟然不报错了,立马测试了一下,大家先看一下效果:
【开发心得】Python+Matplotlib解决X 轴值不按数组排序(已解决)_第3张图片

最终解决

看上图,终于解决了X轴排序的问题,但是为啥图形还是那么奇怪呢?聪明的读者大概猜到是什么问题了,上图图形对应的代码如下:

plt.xticks(range(len(x)),x)
plt.plot(x,y1,label='面积与人数')

结合之前那篇文章,问题一下子就找到了,是第二句的问题,最终正确的代码和图形如下:

plt.xticks(range(len(x)),x)
plt.plot(y1,label='面积与人数')

这下图形终于对了,又学到了新知识!
【开发心得】Python+Matplotlib解决X 轴值不按数组排序(已解决)_第4张图片
多说一句,50-100平方米的购买人数果然多啊。

你可能感兴趣的:(时间之外,开发设计)