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

熱線(xiàn)電話(huà):13121318867

登錄
首頁(yè)精彩閱讀3000字/16張炫酷動(dòng)態(tài)圖,推薦一款好用到爆的Python可視化利器
3000字/16張炫酷動(dòng)態(tài)圖,推薦一款好用到爆的Python可視化利器
2021-12-10
收藏

作者:俊欣

來(lái)源:關(guān)于數(shù)據(jù)分析與可視化

一般提及數(shù)據(jù)可視化,會(huì)Python的讀者朋友可能第一時(shí)間想到的就是matplotlib模塊或者是seaborn模塊,而談及繪制動(dòng)態(tài)圖表,大家想到的比較多的是Plotly或者是Pyecharts

今天小編來(lái)為大家介紹另外一個(gè)繪制動(dòng)態(tài)圖表的模塊,使用起來(lái)也是非常的便捷,而且繪制出來(lái)的圖表也是十分的精湛好看,它叫pygal,相比較seaborn等常用的模塊相比,該模塊的優(yōu)點(diǎn)有:

  • 高度可定制,而且用法簡(jiǎn)單
  • 圖表可交互性強(qiáng)
  • 圖像可導(dǎo)出SVG格式(矢量圖形)
  • 與Django、Flask等Web框架高度集成

因此,pygal模塊小編以為還是值得拿出來(lái)講講的,我們大致會(huì)說(shuō)這些內(nèi)容:

模塊的安裝

模塊的安裝十分的簡(jiǎn)單,通過(guò)pip install就能夠?qū)崿F(xiàn),

pip install pygal

當(dāng)然國(guó)內(nèi)的小伙伴要是覺(jué)得下載的速度慢,也可以通過(guò)加入第三方的鏡像來(lái)提速

pip install -i http://pypi.douban.com/simple/ pygal

柱狀圖

我們來(lái)看柱狀圖的繪制,先看單列柱狀圖的例子

view = pygal.Bar() #圖表名 view.title = '柱狀圖' #添加數(shù)據(jù) view.add('數(shù)據(jù)', [1,3,5,7,9,11]) #在瀏覽器中查看 #view.render_in_browser() view.render_to_file('bar.svg')

output

我們既可以通過(guò)render_to_file()方法來(lái)導(dǎo)出成文件,也可以通過(guò)render_in_browser()方法在瀏覽器中查看

我們?cè)賮?lái)看多列柱狀圖的繪制,代碼如下

view.add('奇數(shù)', [1,3,5,7,9,11])
view.add('偶數(shù)', [2,4,6,8,10,12])

output

要是我們想將柱狀圖橫過(guò)來(lái)看,將上述代碼當(dāng)中的一小部分替換成

view = pygal.HorizontalBar()

output

而要是我們想要堆疊形式的柱狀圖,則需要將上述代碼當(dāng)中的一小部分替換成

view = pygal.HorizontalStackedBar()

output

折線(xiàn)圖

對(duì)于折線(xiàn)圖的繪制,其實(shí)與上面柱狀圖的繪制基本一致,我們直接來(lái)看代碼

view = pygal.Line() #圖表名 view.title = '折線(xiàn)圖' #添加數(shù)據(jù) view.add('奇數(shù)', [1,3,5,7,9,11])
view.add('偶數(shù)', [2,4,6,8,10,12]) #在瀏覽器中查看 view.render_in_browser()

output

也和上面柱狀圖的代碼邏輯保持一致,折線(xiàn)圖中也有堆疊式的折線(xiàn)圖,只需要將上面的代碼當(dāng)中的一部分替換成

view = pygal.StackedLine(fill=True)

餅圖

同樣,餅圖的繪制也是相似的代碼邏輯

view = pygal.Pie() #圖表名 view.title = '餅狀圖' #添加數(shù)據(jù) view.add('A', 23)
view.add('B', 40)
view.add('C', 15)

view.render_to_file('pie.svg')

output

同時(shí)我們也可以繪制圓環(huán)圖,在餅圖的中心掏空出來(lái)一塊,代碼大致相同,只是需要將上面的一小部分替換成

#設(shè)置空心圓半徑 view = pygal.Pie(inner_radius=0.4)

output

當(dāng)我們每個(gè)類(lèi)當(dāng)中不止只有一個(gè)數(shù)字的時(shí)候,可以繪制多級(jí)餅圖,代碼如下

view = pygal.Pie() #圖表名 view.title = '多級(jí)餅圖' #添加數(shù)據(jù) view.add('A', [20, 25, 30, 45]) view.add('B', [15, 19, 25, 50]) view.add('C', [18, 22, 28, 35]) view.render_to_file('pie_multi.svg') 

output

雷達(dá)圖

雷達(dá)圖可以幫我們從多個(gè)維度來(lái)分析數(shù)據(jù),例如我們分析運(yùn)動(dòng)員的運(yùn)動(dòng)能力的時(shí)候,就會(huì)從多個(gè)維度來(lái)綜合看待,這個(gè)時(shí)候雷達(dá)圖就變得非常有用,代碼如下

radar_chart = pygal.Radar()
radar_chart.title = 'NBA 各球員能力比拼' radar_chart.x_labels = ['得分', '防守', '助攻', '失誤', '籃板']
radar_chart.add('庫(kù)里', [70, 98, 96, 85, 97])
radar_chart.add('詹姆斯', [60, 95, 50, 75, 99])
radar_chart.add('杜蘭特', [94, 45, 88, 91, 98])
radar_chart.render_to_file('radar_nba.svg')

output

當(dāng)然上面的數(shù)據(jù)都是瞎編的,喜歡NBA的讀者朋友或者是喜歡上面幾個(gè)球形的讀者朋友看了可別噴我哦

箱型圖

箱型圖可以快速地幫我們了解數(shù)據(jù)的分布,查看是否存在極值。在pygal模塊當(dāng)中也提供了繪制箱型圖的方法,代碼如下

box_plot = pygal.Box() box_plot.title = '各瀏覽器的使用量' box_plot.add('Chrome', [6395, 8212, 7520, 7218, 12464, 1660, 2123, 8607]) box_plot.add('Firefox', [7512, 8099, 11700, 2651, 6361, 1044, 8502, 9450]) box_plot.add('360安全衛(wèi)士', [3472, 2933, 4203, 5510, 5810, 1828, 9013, 4669]) box_plot.add('Edge', [4310, 4109, 5935, 7902, 14404, 13608, 34004, 10210]) box_plot.render_to_file("box.svg") 

output

儀表盤(pán)

儀表盤(pán)可以幫助我們量化指標(biāo)的好壞,代碼如下

gauge_chart = pygal.Gauge(human_readable=True)
gauge_chart.title = '不同瀏覽器的性能差異' gauge_chart.range = [0, 10000]
gauge_chart.add('Chrome', 8212)
gauge_chart.add('Firefox', 8099)
gauge_chart.add('360安全衛(wèi)士', 2933)
gauge_chart.add('Edge', 2530)
gauge_chart.render_to_file('gauge_1.svg')

output

熱力圖

熱力圖可以更加直觀(guān)的觀(guān)測(cè)每個(gè)區(qū)域當(dāng)中數(shù)據(jù)的分布,代碼如下

treemap = pygal.Treemap() treemap.title = 'Binary TreeMap' treemap.add('A', [12, 15, 12, 40, 2, 10, 10, 13, 12, 13, 40, None, 19]) treemap.add('B', [4, 2, 5, 10, 30, 4, 2, 7, 4, -10, None, 8, 30, 10]) treemap.add('C', [3, 8, 3, 3, 5, 15, 3, 5, 4, 12]) treemap.add('D', [23, 18]) treemap.add('E', [11, 2, 1, 12, 3, 13, 1, 2, 13, 14, 3, 1, 2, 10, 1, 10, 12, 1]) treemap.add('F', [31]) treemap.add('G', [15, 9.3, 8.1, 12, 4, 34, 2]) treemap.add('H', [12, 13, 3]) treemap.render_in_browser() 

output

地圖

首先我們來(lái)看世界地圖的繪制,在這之前,我們還要下載繪制整個(gè)世界地圖所需要的插件

pip install pygal_maps_world

代碼如下

worldmap_chart = pygal.maps.world.World()
worldmap_chart.title = 'Some countries' worldmap_chart.add('A countries', ['國(guó)家名稱(chēng)的縮寫(xiě)'])
worldmap_chart.add('B countries', ['國(guó)家名稱(chēng)的縮寫(xiě)'])
worldmap_chart.add('C countries', ['國(guó)家名稱(chēng)的縮寫(xiě)'])
worldmap_chart.render_in_browser()

output

我們也可以針對(duì)不同國(guó)家的計(jì)數(shù)來(lái)進(jìn)行地圖的繪制,例如不同國(guó)家重大疾病的死亡人數(shù),代碼如下

worldmap_chart = pygal.maps.world.World()
worldmap_chart.title = 'Minimum deaths by capital punishement (source: Amnesty International)' worldmap_chart.add('In 2012', { '國(guó)家名稱(chēng)的縮寫(xiě)': 數(shù)量, '國(guó)家名稱(chēng)的縮寫(xiě)': 數(shù)量,
  .....
})
worldmap_chart.render_in_browser()

output

我們也可以繪制以五大洲為主的世界地圖,代碼如下

worldmap_continent = pygal.maps.world.SupranationalWorld()
worldmap_continent.add('Asia', [('asia', 1)])
worldmap_continent.add('Europe', [('europe', 1)])
worldmap_continent.add('Africa', [('africa', 1)])
worldmap_continent.add('North america', [('north_america', 1)])
worldmap_continent.add('South america', [('south_america', 1)])
worldmap_continent.add('Oceania', [('oceania', 1)])
worldmap_continent.add('Antartica', [('antartica', 1)])
worldmap_continent.render_in_browser()

output

當(dāng)然我們也可以將某個(gè)國(guó)家作為繪制,例如我們以法國(guó)為例,首先我們需要下載繪制單獨(dú)某個(gè)國(guó)家的地圖所依賴(lài)的插件

pip install pygal_maps_fr

代碼如下

fr_chart = pygal.maps.fr.Regions()
fr_chart.title = '法國(guó)區(qū)域圖' fr_chart.add('區(qū)域名稱(chēng)', ['數(shù)量'])
fr_chart.render_in_browser()

output

但是提及繪制某個(gè)國(guó)家的地圖而言,目前支持的國(guó)家的數(shù)量并不多,在官網(wǎng)上面也只羅列法國(guó)和瑞士這兩個(gè)國(guó)家,其他國(guó)家的插件下載,小編嘗試下載了一下,都下載不了,后面就等官方的更新與優(yōu)化把

數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

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

OK
客服在線(xiàn)
立即咨詢(xún)
客服在線(xiàn)
立即咨詢(xún)
') } 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(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶(hù)后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".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 = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+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); }