Python可視化:matplotlib的座標軸和rc參數設置指南!

設置座標軸

​ 還記得上次畫的那條“項鍊”嘛?結尾的時候有說過,這些是新手村禮包,還有很多其他值得探索的地方呢,那麼就一起來康康還有哪些意想不到的操作吧(包括但不限於折線圖哦,很多操作再其他圖中也是可以運用噠!)

當我看到這樣一副圖的時候,心裏有點點疑問,貌似和手繪的圖有點不一樣啊,到底哪裏不一樣呢,來個對比看一下。

這是matplotlib繪製的y = x^2:

這是本人親手繪製的y = x^2:

(本靈魂畫手已上線,非戰鬥人員請撤離!不要太在意細節哈,忽視那個長的不太協調的x軸和彎彎曲曲如蚯蚓的拋物線,手殘黨表示真的盡力了,意會!意會哈!)

正經的說,雖然都是y = x^2的圖像,是不是感覺兩幅圖差異還蠻大的。

​ 最明顯的區別在於x軸和y軸的位置,繪製拋物線時我們習慣與y軸位於中間位置,所以在用matplotlib繪圖時可以不可以改變座標軸位置呢?答案當然時肯定的!

ax = plt.gca()  #獲取座標軸對象
ax.spines['right'].set_color('none') #把右邊的邊框顏色設置爲無色,隱藏右邊框
ax.spines['top'].set_color('none')  #把上邊的邊框顏色設置爲無色,隱藏上邊框

ax.xaxis.set_ticks_position('bottom') # 指定下邊的邊框作爲 x 軸   
ax.yaxis.set_ticks_position('left')  #指定左邊的邊框爲 y 軸

ax.spines['bottom'].set_position(('data', 0)) #指定 data  設置的bottom(也就是指定的x軸)綁定到y軸的0這個點上
ax.spines['left'].set_position(('data', 0))  #指定 data  設置的left(也就是指定的y軸)綁定到x軸的0這個點上 

x = np.arange(-1,1,0.01)
y = x**2
plt.plot(x,y)
plt.legend(["y = x^2"],loc = 1)
plt.savefig("line3.jpg")
plt.show()

效果圖如下:

這樣看起來是不是和上邊手繪的那一個圖相似了很多?

改變座標軸的步驟在上邊代碼中註釋部分寫的很清楚啦,不再佔篇幅贅述,其實就是把用不到的邊框透明化,然後移動了另外兩個邊框作爲x軸和y軸,其他刻度、標籤以及圖標等的設置在介紹折線圖的時候都有介紹過。

rc參數設置

​ 作爲一個英語渣,能用中文的時候還是希望能用中文,然而當我在繪圖的時候卻發生了一點意外,喏,就是下邊這副眼熟的圖:

plt.figure(figsize=(6,4),dpi = 80) 
plt.plot(x,y)  
plt.title("折線圖")  
plt.xlabel("x")  
plt.ylabel("y")  
plt.xlim(-1,1)  
plt.ylim(0,1.1)    
plt.xticks([-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1])  
plt.yticks([0,0.25,0.5,0.75,1])
plt.legend(["y = x^2"],loc = 9) 
plt.savefig("line.png") 
plt.show()  

​ 和最開始的那幅圖幾乎一毛一樣,只不過改了個標題,上邊圖的標題是“line”,我想改成“折線圖”三個字,結果就變成這個樣子了,原因在於原生的matplotlib是不支持中文顯示的,所以需要進行rc參數的設置。所謂rc參數,實際上修改是默認的屬性,原來不支持中文,修改一下讓它支持中文就可以了。

​ 在這裏還有一個小坑,那就是通過rc參數設置顯示中文後,一些特殊符號比如負號顯示會出現問題,這裏不再用具體的例子引出這個小坑了,我們順手給它一起解決掉,節省點篇幅(實際是我有點懶233

​ 解決方案很久簡單,兩行代碼搞定:

plt.rcParams['font.sans-serif']=['Simhei']  #顯示中文
plt.rcParams['axes.unicode_minus']=False    #顯示負號  	

再運行上邊的代碼看下效果:

中文和負號都正常顯示啦!

​ rc參數的設置到這裏就結束了嘛?實際上常用的rc參數設置就是這兩行沒錯,然而還有需要提醒的一點,記下來,要考的!

​rc參數修改的是全局默認屬性,也就是說,這個參數一旦設置,後續進行的所有操作都會受到rc參數的影響!

這也是進行一次設置,全篇畫圖函數都可以正常顯示中文和負號的原因。

而rc參數還可以進行諸如線條寬度,標記點尺寸等等的各種設置,這些設置對於每個畫圖函數來說幾乎都有相對應的參數進行單獨設置,完全沒有必要在rc參數中對全篇進行限制,所以如非必要,最好不要通過rc參數進行除了顯示中文和符號外的其他設置。

同一幅圖中繪製多條折線

​ 其實折線圖一個很重要的應用是查看事務隨着時間的發展所呈現出來的趨勢,有時候我們想要查看不同的指標在同一段時間內的變化趨勢,就需要在一副圖中繪製多條折線,這種需求要怎樣實現呢?

​ 實際上原理很簡單,那就是創建一個畫布後,在同一塊畫布中重複繪製就可以了:

plt.figure(figsize=(12,4))
plt.plot(df.iloc[:,0].iloc[:15],df.iloc[:,1].iloc[:15],marker = "o",label = "收盤價")
plt.plot(df.iloc[:,0].iloc[:15],df.iloc[:,2].iloc[:15],marker = "v",label = "最高價")
plt.plot(df.iloc[:,0].iloc[:15],df.iloc[:,3].iloc[:15],marker = "v",label = "最低價")
plt.plot(df.iloc[:,0].iloc[:15],df.iloc[:,4].iloc[:15],marker = "o",label = "開盤價")
plt.legend();

效果圖:

​ 這是一段時間內股票價格的數據,截取了時間作爲x軸數據,開盤價,最高價,最低價,收盤價爲y軸數據繪製的折線圖,能夠看出這一段時間內股票價格的走勢還是比較平穩的。

​ 溫馨提示:在同一塊畫布中可以重複繪圖,仔細觀察會發現,紅色線條在其他線條圖層的上方,即後繪製的圖會覆蓋前邊繪製的圖,所以,在繪製圖形時要注意,例如餅圖這種,需要同時展現好幾塊餅的情況,不能採用這種繪圖方式,而是需要創建子圖,進行多圖展示!

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