
我們一直在講python可視化,用matplotlib來(lái)繪制各類圖表,今天我們?cè)賮?lái)講講matplotlib的坐標(biāo)軸和rc參數(shù)設(shè)置指南!
設(shè)置坐標(biāo)軸
還記得上次畫的那條“項(xiàng)鏈”嘛?結(jié)尾的時(shí)候有說(shuō)過,這些是新手村禮包,還有很多其他值得探索的地方呢,那么就一起來(lái)看康還有哪些意想不到的操作吧(包括但不限于折線圖哦,很多操作在其他圖中也是可以運(yùn)用噠!)
當(dāng)我看到這樣一副圖的時(shí)候,心里有點(diǎn)點(diǎn)疑問,貌似和手繪的圖有點(diǎn)不一樣啊,到底哪里不一樣呢,來(lái)個(gè)對(duì)比看一下。
這是matplotlib繪制的y = x^2:
這是本人親手繪制的y = x^2:
(本靈魂畫手已上線,非戰(zhàn)斗人員請(qǐng)撤離!不要太在意細(xì)節(jié)哈,忽視那個(gè)長(zhǎng)的不太協(xié)調(diào)的x軸和彎彎曲曲如蚯蚓的拋物線,手殘黨表示真的盡力了,意會(huì)!意會(huì)哈?。?
正經(jīng)的說(shuō),雖然都是y = x^2的圖像,是不是感覺兩幅圖差異還蠻大的。
最明顯的區(qū)別在于x軸和y軸的位置,繪制拋物線時(shí)我們習(xí)慣與y軸位于中間位置,所以在用matplotlib繪圖時(shí)可以不可以改變坐標(biāo)軸位置呢?答案當(dāng)然是肯定的!
ax = plt.gca() #獲取坐標(biāo)軸對(duì)象 ax.spines['right'].set_color('none') #把右邊的邊框顏色設(shè)置為無(wú)色,隱藏右邊框 ax.spines['top'].set_color('none') #把上邊的邊框顏色設(shè)置為無(wú)色,隱藏上邊框 ax.xaxis.set_ticks_position('bottom') # 指定下邊的邊框作為 x 軸 ax.yaxis.set_ticks_position('left') #指定左邊的邊框?yàn)?y 軸 ax.spines['bottom'].set_position(('data', 0)) #指定 data 設(shè)置的bottom(也就是指定的x軸)綁定到y(tǒng)軸的0這個(gè)點(diǎn)上 ax.spines['left'].set_position(('data', 0)) #指定 data 設(shè)置的left(也就是指定的y軸)綁定到x軸的0這個(gè)點(diǎn)上 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()
效果圖如下:
這樣看起來(lái)是不是和上邊手繪的那一個(gè)圖相似了很多?
改變坐標(biāo)軸的步驟在上邊代碼中注釋部分寫的很清楚啦,不再占篇幅贅述,其實(shí)就是把用不到的邊框透明化,然后移動(dòng)了另外兩個(gè)邊框作為x軸和y軸,其他刻度、標(biāo)簽以及圖標(biāo)等的設(shè)置在介紹折線圖的時(shí)候都有介紹過。
rc參數(shù)設(shè)置
作為一個(gè)英語(yǔ)渣,能用中文的時(shí)候還是希望能用中文,然而當(dāng)我在繪圖的時(shí)候卻發(fā)生了一點(diǎn)意外,喏,就是下邊這副眼熟的圖:
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()
和最開始的那幅圖幾乎一毛一樣,只不過改了個(gè)標(biāo)題,上邊圖的標(biāo)題是“l(fā)ine”,我想改成“折線圖”三個(gè)字,結(jié)果就變成這個(gè)樣子了,原因在于原生的matplotlib是不支持中文顯示的,所以需要進(jìn)行rc參數(shù)的設(shè)置。所謂rc參數(shù),實(shí)際上修改是默認(rèn)的屬性,原來(lái)不支持中文,修改一下讓它支持中文就可以了。
在這里還有一個(gè)小坑,那就是通過rc參數(shù)設(shè)置顯示中文后,一些特殊符號(hào)比如負(fù)號(hào)顯示會(huì)出現(xiàn)問題,這里不再用具體的例子引出這個(gè)小坑了,我們順手給它一起解決掉,節(jié)省點(diǎn)篇幅(實(shí)際是我有點(diǎn)懶233)
解決方案很久簡(jiǎn)單,兩行代碼搞定:
plt.rcParams['font.sans-serif']=['Simhei'] #顯示中文 plt.rcParams['axes.unicode_minus']=False #顯示負(fù)號(hào)
再運(yùn)行上邊的代碼看下效果:
中文和負(fù)號(hào)都正常顯示啦!
rc參數(shù)的設(shè)置到這里就結(jié)束了嘛?實(shí)際上常用的rc參數(shù)設(shè)置就是這兩行沒錯(cuò),然而還有需要提醒的一點(diǎn),記下來(lái),要考的!
rc參數(shù)修改的是全局默認(rèn)屬性,也就是說(shuō),這個(gè)參數(shù)一旦設(shè)置,后續(xù)進(jìn)行的所有操作都會(huì)受到rc參數(shù)的影響!
這也是進(jìn)行一次設(shè)置,全篇畫圖函數(shù)都可以正常顯示中文和負(fù)號(hào)的原因。
而rc參數(shù)還可以進(jìn)行諸如線條寬度,標(biāo)記點(diǎn)尺寸等等的各種設(shè)置,這些設(shè)置對(duì)于每個(gè)畫圖函數(shù)來(lái)說(shuō)幾乎都有相對(duì)應(yīng)的參數(shù)進(jìn)行單獨(dú)設(shè)置,完全沒有必要在rc參數(shù)中對(duì)全篇進(jìn)行限制,所以如非必要,最好不要通過rc參數(shù)進(jìn)行除了顯示中文和符號(hào)外的其他設(shè)置。
同一幅圖中繪制多條折線
其實(shí)折線圖一個(gè)很重要的應(yīng)用是查看事務(wù)隨著時(shí)間的發(fā)展所呈現(xiàn)出來(lái)的趨勢(shì),有時(shí)候我們想要查看不同的指標(biāo)在同一段時(shí)間內(nèi)的變化趨勢(shì),就需要在一副圖中繪制多條折線,這種需求要怎樣實(shí)現(xiàn)呢?
實(shí)際上原理很簡(jiǎn)單,那就是創(chuàng)建一個(gè)畫布后,在同一塊畫布中重復(fù)繪制就可以了:
plt.figure(figsize=(12,4)) plt.plot(df.iloc[:,0].iloc[:15],df.iloc[:,1].iloc[:15],marker = "o",label = "收盤價(jià)") plt.plot(df.iloc[:,0].iloc[:15],df.iloc[:,2].iloc[:15],marker = "v",label = "最高價(jià)") plt.plot(df.iloc[:,0].iloc[:15],df.iloc[:,3].iloc[:15],marker = "v",label = "最低價(jià)") plt.plot(df.iloc[:,0].iloc[:15],df.iloc[:,4].iloc[:15],marker = "o",label = "開盤價(jià)") plt.legend();
效果圖:
這是一段時(shí)間內(nèi)股票價(jià)格的數(shù)據(jù),截取了時(shí)間作為x軸數(shù)據(jù),開盤價(jià),最高價(jià),最低價(jià),收盤價(jià)為y軸數(shù)據(jù)繪制的折線圖,能夠看出這一段時(shí)間內(nèi)股票價(jià)格的走勢(shì)還是比較平穩(wěn)的。
溫馨提示:在同一塊畫布中可以重復(fù)繪圖,仔細(xì)觀察會(huì)發(fā)現(xiàn),紅色線條在其他線條圖層的上方,即后繪制的圖會(huì)覆蓋前邊繪制的圖,所以,在繪制圖形時(shí)要注意,例如餅圖這種,需要同時(shí)展現(xiàn)好幾塊餅的情況,不能采用這種繪圖方式,而是需要?jiǎng)?chuàng)建子圖,進(jìn)行多圖展示!
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無(wú)論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類分析作為 “無(wú)監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10