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

熱線電話:13121318867

登錄
首頁精彩閱讀刷爆網(wǎng)絡(luò)的動態(tài)條形圖,3行Python代碼就能搞定
刷爆網(wǎng)絡(luò)的動態(tài)條形圖,3行Python代碼就能搞定
2020-10-26
收藏

作者:小伍哥

來源:AI入門學(xué)習(xí)

上次出了一個在網(wǎng)站「Flourish」畫動態(tài)條形圖的文章【動態(tài)條形圖視頻教程】,需要登錄網(wǎng)址很多人可能覺得不方便,現(xiàn)在有大佬出了個python包,只需幾行代碼就能搞定動態(tài)條形圖,非常強大,給大家分享下。

一、前期準(zhǔn)備工作

1、官方參考文檔

GitHub :https://github.com/dexplo/bar_chart_race

說明文檔:https://www.dexplo.org/bar_chart_race/

2、軟件安裝(該安裝方法只能安裝0.1版本)

pip install bar_chart_race
conda install -c conda-forge bar_chart_race

0.2版本需要到github安裝

壓縮包解壓到軟件安裝目錄的/site-packages目錄下,利用命令行安裝即可

3、安裝ffmpeg、ImageMagick

ffmpeg包:不然無法輸出 mp4/m4v/mov/等格式的視頻,該包比較復(fù)雜,需要配置變量環(huán)境,具體操作可以看看這個博客:

https://baijiahao.baidu.com/s?id=1660327134602942057&wfr=spider&for=pc

ImageMagick包:如果你要創(chuàng)建GIF,需要安裝這個包ImageMagick,安裝方法與上述類似。

二、官方數(shù)據(jù)畫圖

上述準(zhǔn)備都做好了,那就可以開始畫圖了,利用官方提供的數(shù)據(jù),直接加載就可以,我的數(shù)據(jù)下載沒成功,所以自己上傳數(shù)據(jù)繪圖,等下回講怎么自己上傳數(shù)據(jù)。

#加載包
import bar_chart_race as bcr
#下載數(shù)據(jù)
df = bcr.load_dataset('covid19_tutorial')
#生成GIF圖像
bcr.bar_chart_race(df, 'covid19_horiz.gif')
#生成MP4
bcr.bar_chart_race(df, 'covid19_horiz.MP4')

生成的GIF

生成的MP4

三、自己的數(shù)據(jù)畫圖

如果是自己的數(shù)據(jù),要進行一定的處理,達(dá)到畫圖格式,不然會報錯。

#讀取數(shù)據(jù)
df = pd.read_csv('data.csv')
#格式處理,需要把日期date轉(zhuǎn)換成索引,不能作為單獨一列
df = df.set_index(keys='date')
作者也提供了兩個處理數(shù)據(jù)的函數(shù)
bcr.prepare_wide_data bcr.prepare_long_data

原始數(shù)據(jù)

處理后數(shù)據(jù)(date轉(zhuǎn)換成了索引

四、圖形美化

作者還提供了很多參數(shù),對圖形進行調(diào)整和美化,輸出的圖形更漂亮

1、橫轉(zhuǎn)縱 Vertical bars

#orientation='v',.gif變成MP4即可輸出視頻
bcr.bar_chart_race(df, 'covid19_horiz.gif', orientation='v')

2、升序排序

# 排序方式,sort='asc'-升序
bcr.bar_chart_race(df, 'covid19_horiz.gif', sort='asc')

3、類目數(shù)限制,此處設(shè)置為最多出現(xiàn)6條

# 設(shè)置最多能顯示的條目數(shù) n_bars=6
bcr.bar_chart_race(df, 'covid19_horiz.gif', n_bars=6)

4、設(shè)置展示類目

# 選取如下5個國家的數(shù)據(jù) fixed_order
bcr.bar_chart_race(df, 'covid19_horiz.gif', 
fixed_order=['Iran', 'USA', 'Italy', 'Spain', 'Belgium'])

5、固定坐標(biāo)軸

#設(shè)置數(shù)值的最大值,固定數(shù)值軸fixed_max
bcr.bar_chart_race(df, 'covid19_horiz.gif', fixed_max=True)

6、改變圖像幀數(shù)

#圖像幀數(shù),數(shù)值越小,越不流暢。越大,越流暢。默認(rèn)為10比較流暢,改為3就有些卡頓了
bcr.bar_chart_race(df, 'covid19_horiz.gif', steps_per_period=3)

7、設(shè)置幀率,默認(rèn)為500ms

# 設(shè)置20幀的總時間,此處為200ms
bcr.bar_chart_race(df, 'covid19_horiz.gif', 
steps_per_period=20, period_length=200)

8、設(shè)置每幀增加的標(biāo)簽時間,默認(rèn)為False

# 輸出gif
bcr.bar_chart_race(df, 'covid19_horiz.gif', interpolate_period=True)

9、繪圖屬性設(shè)置

# figsize-設(shè)置畫布大小,默認(rèn)(6, 3.5)
# dpi-圖像分辨率,默認(rèn)144
# label_bars-顯示柱狀圖的數(shù)值信息,默認(rèn)為True
# period_label-顯示時間標(biāo)簽信息,默認(rèn)為True
# title-圖表標(biāo)題
bcr.bar_chart_race(df, 'covid19_horiz.gif', figsize=(5, 3), dpi=100, label_bars=False, 
                   period_label={'x': .99, 'y': .1, 'ha': 'right', 'color': 'red'},
                   title='COVID-19 Deaths by Country')

10、配置標(biāo)簽文字大小

# bar_label_size-柱狀圖標(biāo)簽文字大小
# tick_label_size-坐標(biāo)軸標(biāo)簽文字大小
# title_size-標(biāo)題標(biāo)簽文字大小
bcr.bar_chart_race(df, 'covid19_horiz.gif', 
                   bar_label_size=4, tick_label_size=5, 
                   title='COVID-19 Deaths by Country',
                   title_size='smaller')

11、全局字體屬性設(shè)置

# shared_fontdict-全局字體屬性
bcr.bar_chart_race(df, 'covid19_horiz.gif', 
                   title='COVID-19 Deaths by Country', 
                   shared_fontdict={'family': 'Helvetica', 'weight': 'bold', 
                                    'color': 'rebeccapurple'})

12、透明度,邊框等設(shè)置

# bar_kwargs-條形圖屬性設(shè)置參數(shù)
bcr.bar_chart_race(df, 'covid19_horiz.gif', 
bar_kwargs={'alpha': .2, 'ec': 'black', 'lw': 3})

13、日期格式設(shè)置

# 設(shè)置日期格式,默認(rèn)為'%Y-%m-%d'
bcr.bar_chart_race(df, 'covid19_horiz.gif', period_fmt='%b %-d, %Y')

14、改日期標(biāo)簽為數(shù)值格式

# 設(shè)置日期標(biāo)簽為數(shù)值
bcr.bar_chart_race(df.reset_index(drop=True), 
                   'covid19_horiz.gif', interpolate_period=True,
                   period_fmt='Index value - {x:.2f}')

15、添加匯總統(tǒng)計

#設(shè)置文本位置、數(shù)值、大小、顏色等
def summary(values, ranks):    
total_deaths = int(round(values.sum(), -2))
s = f'Total Deaths - {total_deaths:,.0f}'
return {'x': .99, 'y': .05, 's': s, 'ha': 'right', 'size': 8}
# 添加文本
bcr.bar_chart_race(df, 
                   'covid19_horiz.gif',
                   period_summary_func=summary

16、添加垂直條參考線(平均值、分位數(shù)等)

# 設(shè)置垂直條數(shù)值,分位數(shù)
def func(values, ranks):
return values.quantile(.9)
# 添加垂直條
bcr.bar_chart_race(df, 'covid19_horiz.gif',
                   perpendicular_bar_func=func)

17、設(shè)置柱狀圖顏色

'dark12' is the default colormap. If there are more than 10 columns, then the default colormap will be 'dark24'

# 設(shè)置柱狀圖顏色
bcr.bar_chart_race(df, 'covid19_horiz.gif', cmap='accent')

18、顏色不重復(fù)

#filter_column_colors保證顏色不重復(fù)
bcr.bar_chart_race(df, 'covid19_horiz.gif',  
                   cmap='accent',  
                   filter_column_colors=True)

19、中文支持配置

中文配置只需在第三方庫的_make_chart.py文件中,加入如下三行代碼。

#中文顯示
plt.rcParams['font.sans-serif'] = ['SimHei']  
#Windows
plt.rcParams['font.sans-serif'] = ['Hiragino Sans GB'] 
#Mac
plt.rcParams['axes.unicode_minus'] = False

20、自定義顏色

此外通過在「_colormaps.py」文件中添加顏色信息,經(jīng)cmap引用,即可自定義配置顏色。

colormaps = {   
  "new_colors": [
    '#ff812c', 
    '#ff5a5a', 
    '#00c5d2', 
    '#a64dff',
    '#4e70f0',
    '#f95dba', 
    '#ffce2b']}

——熱門課程推薦:

想從事業(yè)務(wù)型數(shù)據(jù)分析師,您可以點擊>>>“數(shù)據(jù)分析師”了解課程詳情;

想從事數(shù)據(jù)分析師您可以點擊>>>“大數(shù)據(jù)就業(yè)”了解課程詳情;

想成為人工智能工程師,您可以點擊>>>“人工智能就業(yè)”了解課程詳情;

想了解Python數(shù)據(jù)分析,您可以點擊>>>“Python數(shù)據(jù)分析師”了解課程詳情;

想咨詢互聯(lián)網(wǎng)運營,你可以點擊>>>互聯(lián)網(wǎng)運營就業(yè)班”了解課程詳情;

想了解更多優(yōu)質(zhì)課程,請點擊>>>

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