1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        刷爆全網(wǎng)的動態(tài)條形圖,原來5行Python代碼就能實現(xiàn)!

        共 5371字,需瀏覽 11分鐘

         ·

        2020-10-26 10:30


        大家好,我是一行


        今天分享的文章是用python來制作目前最火的動態(tài)條形圖


        在B站上搜索「數(shù)據(jù)可視化」這個關鍵詞,可以看到很多與動態(tài)條形圖相關的視頻。


        好多視頻都達到了上百萬的播放量,屬實厲害。



        目前網(wǎng)上實現(xiàn)動態(tài)條形圖現(xiàn)成的工具也很多。


        比如數(shù)可視的「花火hanabi」,嫡數(shù)的「鏑數(shù)圖表」,以及國外網(wǎng)站「Flourish」。


        但是作為一名Pythoner,當然是想要研究一下如何用Python來實現(xiàn)。


        之前也看過大佬們通過MatplotlibPlotlyPyecharts實現(xiàn)類似的功能,就是代碼量有點多,看的腦瓜疼。


        所以作者最近發(fā)現(xiàn)到了一個庫「Bar Chart Race」,堪稱Python界最強的動態(tài)可視化包。


        GitHub地址:

        https://github.com/dexplo/bar_chart_race


        文檔地址:https://www.dexplo.org/bar_chart_race/


        目前主要有0.1和0.2兩個版本,0.2版本添加動態(tài)曲線圖以及Plotly實現(xiàn)的動態(tài)條形圖。


        庫是挺好的,就是在安裝上有點問題。


        在PyCharm的Project Interpreter上只能安裝到0.1版本,功能不太全。



        通過pip install bar_chart_race也只能到0.1版本。


        最后作者選擇將項目從GitHub上下載下來,再進行安裝。



        下載壓縮包,將解壓后的文件夾放置在項目的venv/lib/python3.7/site-packages目錄下。


        在虛擬環(huán)境下打開文件夾,命令行運行如下命令完成安裝。


        cd?你的項目地址/venv/lib/python3.7/site-packages/bar_chart_race-master
        python?setup.py?install

        #?提示成功安裝
        #?Finished?processing?dependencies?for?bar-chart-race==0.2.0


        好了,安裝成功后就可以引入這個第三方庫。


        import?bar_chart_race?as?bcr

        #?如果出現(xiàn)SSL錯誤,則全局取消證書驗證
        #?import?ssl
        #?ssl._create_default_https_context?=?ssl._create_unverified_context

        #?獲取數(shù)據(jù)
        df?=?bcr.load_dataset('covid19_tutorial')
        #?print(df)

        #?生成GIF圖像
        bcr.bar_chart_race(df,?'covid19_horiz.gif')


        生成了一個GIF圖,具體如下。



        3行代碼Python代碼就實現(xiàn)了,對大佬封裝好的庫表示膜拜~


        這里因為作者封裝好了數(shù)據(jù)處理模塊,只需要3行代碼即可。


        對于我們而言,是需要加載自己的數(shù)據(jù),自己進行處理,所以多了那么2行。


        示例里的數(shù)據(jù)直接使用作者提供的,在data文件夾下的covid19_tutorial.csv文件(GitHub上有)。



        經(jīng)過其封裝好的數(shù)據(jù)處理函數(shù),得到最終的數(shù)據(jù)。



        另外作者還提供了很多配置參數(shù),供大家選擇。


        01 動態(tài)條形圖變動態(tài)柱狀圖


        #?orientation='v',生成柱狀圖
        bcr.bar_chart_race(df,?'covid19_horiz.gif',?orientation='v')


        02 排序方式,默認為降序(desc)


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


        03?條目數(shù)限制,此處設置為最多出現(xiàn)6條


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


        04 設置固定類目


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


        05 固定數(shù)值軸,使其不發(fā)生動態(tài)變化


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


        06 圖像幀數(shù),默認10幀,此處設置為3幀,可以發(fā)現(xiàn)圖像明顯變得有些卡頓


        #?圖像幀數(shù)。數(shù)值越小,越不流暢。越大,越流暢。
        bcr.bar_chart_race(df,?'covid19_horiz.gif',?steps_per_period=3)


        07 設置幀率,單位時間默認為500ms


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


        08 設置每幀增加的標簽時間,默認為False


        #?輸出MP4
        bcr.bar_chart_race(df,?'covid19_horiz.mp4',?interpolate_period=True)


        09 繪圖屬性設置


        #?figsize-設置畫布大小,默認(6,?3.5)
        #?dpi-圖像分辨率,默認144
        #?label_bars-顯示柱狀圖的數(shù)值信息,默認為True
        #?period_label-顯示時間標簽信息,默認為True
        #?title-圖表標題
        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 配置標簽文字大小


        #?bar_label_size-柱狀圖標簽文字大小
        #?tick_label_size-坐標軸標簽文字大小
        #?title_size-標題標簽文字大小
        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 全局文字屬性


        #?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 條形圖屬性,可以設置透明度,邊框等


        #?bar_kwargs-條形圖屬性
        bcr.bar_chart_race(df,?'covid19_horiz.gif',?bar_kwargs={'alpha':?.2,?'ec':?'black',?'lw':?3})


        13 設置日期標簽的時間格式


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


        14 更改日期標簽為數(shù)值


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


        15 添加動態(tài)文本,此處為數(shù)值總數(shù)統(tǒng)計


        #?設置文本位置、數(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ù)
        def?func(values,?ranks):
        ????return?values.quantile(.9)
        #?添加垂直條
        bcr.bar_chart_race(df,?'covid19_horiz.gif',?perpendicular_bar_func=func)


        17 設置柱狀圖顏色,默認為dark24


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


        18?柱狀圖顏色不重復,上面這個圖是有重復顏色的


        #?去除重復顏色
        bcr.bar_chart_race(df,?'covid19_horiz.gif',?cmap='accent',?filter_column_colors=True)


        這里有一些要注意的地方,比如中文配置,以及自定義顏色配置。


        中文配置只需在第三方庫的「_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


        現(xiàn)在在圖表中加入中文,來看看結果。


        import?bar_chart_race?as?bcr
        import?pandas?as?pd

        #?讀取數(shù)據(jù)
        df?=?pd.read_csv('yuhuanshui.csv',?encoding='utf-8',?header=0,?names=['name',?'number',?'day'])
        #?處理數(shù)據(jù)
        df_result?=?pd.pivot_table(df,?values='number',?index=['day'],?columns=['name'],?fill_value=0)
        #?print(df_result)

        #?生成圖像
        bcr.bar_chart_race(df_result,?'heat.gif',?title='我是余歡水演職人員熱度排行')


        使用電視劇余歡水人物的「百度指數(shù)」數(shù)據(jù)。


        文件具體內(nèi)容如下。



        經(jīng)過數(shù)據(jù)透視表處理后,得到與該庫格式相同的數(shù)據(jù)。



        想用自己的數(shù)據(jù)來做動態(tài)條形圖,5行代碼即可搞定


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


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


        使用一波,看會不會變得好看一些。


        #?使用自定義的顏色列表
        bcr.bar_chart_race(df_result,?'heat.gif',?title='我是余歡水演職人員熱度排行',?cmap='new_colors')


        果然,看起來還不錯~


        還有一些細節(jié)上的參數(shù),大家可通過查看庫的源碼,來了解一二。



        使用到的CSV文件及相關安裝包我已上傳公眾號,回復「條形圖」即可獲取。


        轉(zhuǎn)

        教你用11 種方法高效下載 Python 資源!

        1024當當大促,滿400減160,還能再找行哥領取10元紅包

        1024,節(jié)日快樂!


        萬水千山總是情,點個「好看」行不行

        瀏覽 30
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            夜夜ul | 四虎永久www成人影院 | 校园淫事校长h倪校长 | 张丽与黑人巨大激情视频 | 一本色道久久加勒比精品 | 喘息呻吟军婚h | 99999国产精品 | 操逼官网 | www.7788久久久久久久久 | 午夜成人国产精品 |