<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)的動(dòng)態(tài)條形圖,原來(lái)5行Python代碼就能實(shí)現(xiàn)!

          共 7375字,需瀏覽 15分鐘

           ·

          2021-05-07 02:39

          ??本文轉(zhuǎn)載自公眾號(hào)【法納斯特】,詳情可以點(diǎn)擊上方,關(guān)注該公眾號(hào),獲取更多好文推薦。


          說(shuō)起動(dòng)態(tài)圖表,最火的莫過(guò)于動(dòng)態(tài)條形圖了。


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


          好多視頻都達(dá)到了上百萬(wàn)的播放量,屬實(shí)厲害。



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


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


          但是作為一名Pythoner,當(dāng)然是想要研究一下如何用Python來(lái)實(shí)現(xiàn)。


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


          所以小F最近發(fā)現(xiàn)到了一個(gè)庫(kù)「Bar Chart Race」,堪稱Python界最強(qiáng)的動(dòng)態(tài)可視化包。


          GitHub地址:

          https://github.com/dexplo/bar_chart_race


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


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


          庫(kù)是挺好的,就是在安裝上有點(diǎn)問(wèn)題。


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



          通過(guò)pip install bar_chart_race也只能到0.1版本。


          最后小F選擇將項(xiàng)目從GitHub上下載下來(lái),再進(jìn)行安裝



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


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


          cd 你的項(xiàng)目地址/venv/lib/python3.7/site-packages/bar_chart_race-master
          python setup.py install

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


          好了,安裝成功后就可以引入這個(gè)第三方庫(kù)。


          import bar_chart_race as bcr

          # 如果出現(xiàn)SSL錯(cuò)誤,則全局取消證書(shū)驗(yàn)證
          # 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')


          生成了一個(gè)GIF圖,具體如下。



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


          這里因?yàn)樽髡叻庋b好了數(shù)據(jù)處理模塊,只需要3行代碼即可。


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


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



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



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


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


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


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


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


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


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


          04 設(shè)置固定類目


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


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


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


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


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


          07 設(shè)置幀率,單位時(shí)間默認(rèn)為500ms


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


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


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


          09 繪圖屬性設(shè)置


          # figsize-設(shè)置畫(huà)布大小,默認(rèn)(6, 3.5)
          # dpi-圖像分辨率,默認(rèn)144
          # label_bars-顯示柱狀圖的數(shù)值信息,默認(rèn)為T(mén)rue
          # period_label-顯示時(shí)間標(biāo)簽信息,默認(rèn)為T(mén)rue
          # title-圖表標(biāo)題
          bcr.bar_chart_race(df, 'covid19_horiz.gif', figsize=(53), 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 全局文字屬性


          # 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-條形圖屬性
          bcr.bar_chart_race(df, 'covid19_horiz.gif', bar_kwargs={'alpha'.2'ec''black''lw'3})


          13 設(shè)置日期標(biāo)簽的時(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 添加動(dòng)態(tài)文本,此處為數(shù)值總數(shù)統(tǒng)計(jì)


          # 設(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è)置柱狀圖顏色,默認(rèn)為dark24


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


          18 柱狀圖顏色不重復(fù),上面這個(gè)圖是有重復(fù)顏色的


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


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


          中文配置只需在第三方庫(kù)的「_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)在在圖表中加入中文,來(lái)看看結(jié)果。


          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)過(guò)數(shù)據(jù)透視表處理后,得到與該庫(kù)格式相同的數(shù)據(jù)。



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


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


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


          使用一波,看會(huì)不會(huì)變得好看一些。


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


          果然,看起來(lái)還不錯(cuò)~


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






          瀏覽 78
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  韩国一级中文无码 | 91香蕉视频在线 | 日本一区精品 | 三级黄色小电影网站 | 日本无码免费视频 |