99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀python可視化:matplotlib的坐標(biāo)軸和rc參數(shù)設(shè)置指南
python可視化:matplotlib的坐標(biāo)軸和rc參數(shù)設(shè)置指南
2020-06-04
收藏

我們一直在講python可視化,用matplotlib來繪制各類圖表,今天我們再來講講matplotlib的坐標(biāo)軸和rc參數(shù)設(shè)置指南!

設(shè)置坐標(biāo)軸

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

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

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

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

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

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

最明顯的區(qū)別在于x軸和y軸的位置,繪制拋物線時我們習(xí)慣與y軸位于中間位置,所以在用matplotlib繪圖時可以不可以改變坐標(biāo)軸位置呢?答案當(dāng)然是肯定的!

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

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

ax.spines['bottom'].set_position(('data', 0)) #指定 data  設(shè)置的bottom(也就是指定的x軸)綁定到y(tǒng)軸的0這個點上
ax.spines['left'].set_position(('data', 0))  #指定 data  設(shè)置的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()

效果圖如下:

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

改變坐標(biāo)軸的步驟在上邊代碼中注釋部分寫的很清楚啦,不再占篇幅贅述,其實就是把用不到的邊框透明化,然后移動了另外兩個邊框作為x軸和y軸,其他刻度、標(biāo)簽以及圖標(biāo)等的設(shè)置在介紹折線圖的時候都有介紹過。

rc參數(shù)設(shè)置

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

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()  

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

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

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

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

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

中文和負(fù)號都正常顯示啦!

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

rc參數(shù)修改的是全局默認(rèn)屬性,也就是說,這個參數(shù)一旦設(shè)置,后續(xù)進行的所有操作都會受到rc參數(shù)的影響!

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

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

同一幅圖中繪制多條折線

其實折線圖一個很重要的應(yīng)用是查看事務(wù)隨著時間的發(fā)展所呈現(xiàn)出來的趨勢,有時候我們想要查看不同的指標(biāo)在同一段時間內(nèi)的變化趨勢,就需要在一副圖中繪制多條折線,這種需求要怎樣實現(xiàn)呢?

實際上原理很簡單,那就是創(chuàng)建一個畫布后,在同一塊畫布中重復(fù)繪制就可以了:

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();

效果圖:

這是一段時間內(nèi)股票價格的數(shù)據(jù),截取了時間作為x軸數(shù)據(jù),開盤價,最高價,最低價,收盤價為y軸數(shù)據(jù)繪制的折線圖,能夠看出這一段時間內(nèi)股票價格的走勢還是比較平穩(wěn)的。

溫馨提示:在同一塊畫布中可以重復(fù)繪圖,仔細(xì)觀察會發(fā)現(xiàn),紅色線條在其他線條圖層的上方,即后繪制的圖會覆蓋前邊繪制的圖,所以,在繪制圖形時要注意,例如餅圖這種,需要同時展現(xiàn)好幾塊餅的情況,不能采用這種繪圖方式,而是需要創(chuàng)建子圖,進行多圖展示!

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }