<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          火爆全網(wǎng)的動態(tài)條形圖,手把手教你使用5行Python代碼輕松實現(xiàn)!

          共 5270字,需瀏覽 11分鐘

           ·

          2020-10-07 10:37


          說起動態(tài)圖表,最火的莫過于動態(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)類似的功能,就是代碼量有點多,看的腦瓜疼。


          所以介紹一個Python庫「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文件及相關安裝包我已上傳公眾號,回復「條形圖」即可獲取。


          -END-


          瀏覽 71
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲无码三级电影 | 超碰人人爱 | 大香蕉伊在线观看 | 久久黄色午夜免费视频 | 成人精品免费视频 |