【開發心得】Python+Matplotlib解決X 軸值不按數組排序(已解決)

Python+Matplotlib解決X 軸值不按數組排序最簡單的辦法

問題描述

看標題就知道了,先上個圖給大家
錯誤的圖形X軸
這個圖對應的代碼和數據如下,也是網上找到的最初的代碼,根據自己的數據進行了略微改動,也是最簡單的辦法,讓你會感覺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,語法竟然不報錯了,立馬測試了一下,大家先看一下效果:
錯誤圖形Y軸

最終解決

看上圖,終於解決了X軸排序的問題,但是爲啥圖形還是那麼奇怪呢?聰明的讀者大概猜到是什麼問題了,上圖圖形對應的代碼如下:

plt.xticks(range(len(x)),x)
plt.plot(x,y1,label='面積與人數')

結合之前那篇文章,問題一下子就找到了,是第二句的問題,最終正確的代碼和圖形如下:

plt.xticks(range(len(x)),x)
plt.plot(y1,label='面積與人數')

這下圖形終於對了,又學到了新知識!
正確圖形
多說一句,50-100平方米的購買人數果然多啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章