问题描述
看标题就知道了,先上个图给大家
这个图对应的代码和数据如下,也是网上找到的最初的代码,根据自己的数据进行了略微改动,也是最简单的办法,让你会感觉plt的使用简直是太简单了。
# 折线图
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,语法竟然不报错了,立马测试了一下,大家先看一下效果:
最终解决
看上图,终于解决了X轴排序的问题,但是为啥图形还是那么奇怪呢?聪明的读者大概猜到是什么问题了,上图图形对应的代码如下:
plt.xticks(range(len(x)),x)
plt.plot(x,y1,label='面积与人数')
结合之前那篇文章,问题一下子就找到了,是第二句的问题,最终正确的代码和图形如下:
plt.xticks(range(len(x)),x)
plt.plot(y1,label='面积与人数')
这下图形终于对了,又学到了新知识!
多说一句,50-100平方米的购买人数果然多啊。