<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>

          【Python】Pyecharts 組合圖形繪制實(shí)踐

          共 5892字,需瀏覽 12分鐘

           ·

          2020-12-26 19:21

          ?來源:Python數(shù)據(jù)之道

          作者:Peter

          整理:Lemon

          Pyecharts 組合圖形繪制實(shí)踐

          大家好,之前跟大家分享了用 Pyecharts 繪制桑基圖和餅圖:



          有同學(xué)提了一個(gè)問題,在 Pyecharts 中如何繪制多個(gè)圖形,今天我們來分享下組合圖的繪制。

          在實(shí)際的工作需求中,我們經(jīng)常需要繪制多個(gè)甚至多種不同類型的圖形,有時(shí)候還需要將它們放在一個(gè)頁面中,達(dá)到一個(gè)可視化看板的效果。

          在本文中將利用 pyecharts 來實(shí)現(xiàn)這個(gè)需求,同時(shí)滿足動(dòng)態(tài)可視化的效果,再次感受這個(gè)可視化神器的強(qiáng)大之處,讓你真正愛上它。

          01 環(huán)境

          • Python 3.7
          • Jupyter notebook
          • Pandas 1.1.3
          • pyecharts 1.7.1
          • pyecharts-jupyter-installer 0.0.3

          這里提醒下:

          pyecharts 的版本一定要保持一致,非常重要!

          pyecharts 的版本一定要保持一致,非常重要!

          pyecharts 的版本一定要保持一致,非常重要!

          在安裝的時(shí)候可以直接指定版本號(hào),防止出意外

          02 單個(gè)圖形制作

          在下面的文章部門我們先逐個(gè)繪制多種不同的圖形,這些圖形的繪制不會(huì)涉及到太多的配置項(xiàng),本文中的重點(diǎn)是如何將不同類型的圖形組合在一起。這些圖形包含:

          • 柱狀圖
          • 餅圖
          • 折線圖
          • 熱力圖
          • 漏斗圖
          • 儀表盤

          導(dǎo)入庫

          在進(jìn)行繪制數(shù)據(jù)處理和繪圖之前,我們還是需要先導(dǎo)入各種庫:

          from?pyecharts.globals?import?CurrentConfig,?OnlineHostType???#?事先導(dǎo)入,防止不出圖
          from?pyecharts?import?options?as?opts??#?配置項(xiàng)
          from?pyecharts.charts?import?Bar,?Pie,?Line,?HeatMap,?Funnel,?Gauge,?Grid,?Page??#?各個(gè)圖形的類
          from?pyecharts.faker?import?Faker??#?自身數(shù)據(jù)
          from?pyecharts.commons.utils?import?JsCode???
          from?pyecharts.globals?import?ThemeType,SymbolType

          import?pandas?as?pd
          import?numpy?as?np
          import?random

          模擬數(shù)據(jù)

          首先我們模擬一份簡(jiǎn)單的數(shù)據(jù):通過下面的方式我們可以掌握如何利用pandas快速生成一個(gè)DataFrame數(shù)據(jù)

          柱狀圖

          柱狀圖的制作使用的是 Bar 方法:

          bar?=?(
          ????Bar()
          ????.add_xaxis(df['消費(fèi)'].tolist())
          ????.add_yaxis("5大開支",df['數(shù)據(jù)'].tolist())
          ????.set_global_opts(
          ????????title_opts=opts.TitleOpts(title="Bar-月度開支"),
          ????????legend_opts=opts.LegendOpts(is_show=False),
          ????)
          )

          bar.render_notebook()

          餅圖

          餅圖的制作使用的是Pie:

          pie?=?(
          ????Pie()
          ????.add("",?[list(z)?for?z?in?zip(df['消費(fèi)'].tolist(),?df['數(shù)據(jù)'].tolist())])
          ????.set_global_opts(title_opts=opts.TitleOpts(title="Pie-月度開支"))
          ????.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:?{c}"))
          )

          pie.render_notebook()

          餅圖視頻:

          折線圖

          折線圖的制作使用的是 Line:

          line?=?(
          ????Line()
          ????.add_xaxis(df['消費(fèi)'].tolist())
          ????.add_yaxis("月度開支",?df['數(shù)據(jù)'].tolist())
          ????.set_global_opts(title_opts=opts.TitleOpts(title="Line-月度開支"))
          )

          line.render_notebook()

          熱力圖

          熱力圖使用的是HeatMap()方法,在這里我們使用的是pyecharts中自帶的數(shù)據(jù):

          print(Faker.week)
          print(Faker.clock)
          #?0-50?的隨機(jī)數(shù)+列表推導(dǎo)式

          #?兩層的列表推導(dǎo)式
          value?=?[[i,?j,?random.randint(0,?50)]?for?i?in?range(24)?for?j?in?range(7)]

          heatmap?=?(
          ????HeatMap()
          ????.add_xaxis(Faker.clock)???#?橫軸標(biāo)簽
          ????.add_yaxis("熱力圖",?Faker.week,?value)???#?傳入兩個(gè)列表數(shù)據(jù)
          ????.set_global_opts(
          ????????title_opts=opts.TitleOpts(title="HeatMap-熱力圖"),
          ????????visualmap_opts=opts.VisualMapOpts(),
          ????)
          )

          heatmap.render_notebook()

          熱力圖視頻:

          漏斗圖

          漏斗圖在用戶畫像中運(yùn)用的非常廣,尤其是在電商領(lǐng)域中,從訪問、瀏覽到最終的支付成功等一系列的操作構(gòu)成一個(gè)漏斗,在這里我們模擬一份數(shù)據(jù)來繪制漏斗圖,先生成一個(gè)模擬數(shù)據(jù):

          繪圖代碼如下:

          funnel?=?(
          ????Funnel()
          ????.add("商城漏斗",?[list(z)?for?z?in?zip(df1['操作'].tolist(),?df1['人數(shù)'].tolist())])
          ????.set_global_opts(title_opts=opts.TitleOpts(title="商城用戶漏斗分析"))
          )
          ????
          funnel.render_notebook()

          漏斗圖視頻:

          儀表盤

          在這里我們采用官方中的一個(gè)實(shí)例來制作簡(jiǎn)單的儀表盤:

          gauge?=?(
          ????Gauge()
          ????.add("",?[("完成率",?80)])
          ????.set_global_opts(title_opts=opts.TitleOpts(title="Gauge-儀表盤"))
          )

          gauge.render_notebook()

          03 組合繪圖

          在上面我們通過不同的方法繪制出了各種不同的圖形,都是動(dòng)態(tài)可視化的,非常精美的。下面我們通過 Page 類來將上面的多種圖形來放到一個(gè)可視化看板中。

          1、首先給出整體的繪圖代碼

          #?1、柱狀圖
          def?barPage()?->?Bar:?
          ????bar?=?(
          ????????Bar()
          ????????.add_xaxis(df['消費(fèi)'].tolist())
          ????????.add_yaxis("5大開支",df['數(shù)據(jù)'].tolist())
          ????????.set_global_opts(
          ????????????title_opts=opts.TitleOpts(title="Bar-月度開支"),
          ????????????legend_opts=opts.LegendOpts(is_show=False),)
          ????)
          ????return?bar

          #?2、餅圖
          def?piePage()?->?Pie:
          ????pie?=?(
          ????????Pie()
          ????????.add("",?[list(z)?for?z?in?zip(df['消費(fèi)'].tolist(),?df['數(shù)據(jù)'].tolist())])
          ????????.set_global_opts(title_opts=opts.TitleOpts(title="Pie-月度開支"))
          ????????.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:?{c}"))
          ????)
          ????return?pie

          #?3、折線圖
          def?linePage()?->?Line:
          ????line?=?(
          ????????Line()
          ????????.add_xaxis(df['消費(fèi)'].tolist())
          ????????.add_yaxis("月度開支",?df['數(shù)據(jù)'].tolist())
          ????????.set_global_opts(title_opts=opts.TitleOpts(title="Line-月度開支"))
          ????)
          ????return?line

          #?4、熱力圖

          def?heatmapPage()?->?HeatMap:
          ????value?=?[[i,?j,?random.randint(0,?50)]?for?i?in?range(24)?for?j?in?range(7)]
          ????heatmap?=?(
          ????????HeatMap()
          ????????.add_xaxis(Faker.clock)
          ????????.add_yaxis("熱力圖",?Faker.week,?value)
          ????????.set_global_opts(
          ????????????title_opts=opts.TitleOpts(title="HeatMap-熱力圖"),
          ????????????visualmap_opts=opts.VisualMapOpts(),
          ????????)
          ????)
          ????return?heatmap

          #?5、漏斗圖
          def?funnelPage()?->?Funnel:
          ????funnel?=?(
          ????????Funnel()
          ????????.add("商品",?[list(z)?for?z?in?zip(Faker.choose(),?Faker.values())])
          ????????.set_global_opts(title_opts=opts.TitleOpts(title="Funnel-漏斗圖"))
          ????)
          ????return?funnel


          #?6、儀表盤
          def?gaugePage()?->?Gauge:
          ????gauge?=?(
          ????????Gauge()
          ????????.add("",?[("完成率",?80)])
          ????????.set_global_opts(title_opts=opts.TitleOpts(title="Gauge-儀表盤"))
          ????)
          ????return?gauge


          #?上面是6個(gè)圖形的代碼,下面利用Page進(jìn)行組合
          #?!!!?關(guān)鍵步驟
          page?=?(
          ????Page(layout=Page.DraggablePageLayout)
          ????.add(
          ????????barPage(),
          ????????piePage(),
          ????????linePage(),
          ????????funnelPage(),
          ????????heatmapPage(),
          ????????gaugePage())
          )

          page.render("page_demo.html")

          2、現(xiàn)在解釋一下上面的代碼:

          • 柱狀圖、餅圖等不同的圖形我們封裝成不同的函數(shù)來實(shí)現(xiàn)
          • 使用Page類的add方法,添加上面的各個(gè)函數(shù)
          • 最后使用page.render()來生成一個(gè)html文件,就是我們的各個(gè)圖形下一個(gè)html頁面中

          現(xiàn)在看看生成的組合圖形1的效果

          組合圖形1:

          在目前生成的組合圖形1中,要注意4點(diǎn):

          • 左上角有個(gè)save config的按鈕,接下來這個(gè)按鈕大有用處
          • 整體的圖形是單個(gè)上下排列的,且整體靠左,右邊很多的空白
          • 每個(gè)圖形都是虛線框,這表示圖形可變大小,同時(shí)可以移動(dòng)的
          • 整體需要上下滑動(dòng)來瀏覽全部的圖形,視覺效果不佳

          下面我們通過save config按鈕來進(jìn)行改動(dòng),生成一個(gè)我們自己想看到的組合圖形2效果:

          組合圖形2:

          當(dāng)我們把圖形按照我們的需求排列OK之后,此時(shí)圖形仍然沒有被固定下來,如果我們刷新當(dāng)前頁面,又會(huì)變成組合圖形1的效果。

          現(xiàn)在點(diǎn)擊save config按鈕,保存我們的配置文件。此時(shí)會(huì)在本地當(dāng)前目錄下生成一個(gè)chart_config.json的配置文件。

          接下來我們利用這個(gè)配置來生成上面我們想要達(dá)到的效果圖形,將圖形的格式固定下來,使用下面的代碼:

          Page.save_resize_html("page_demo.html",???#?上面的HTML文件名稱
          ??????????????????????cfg_file="chart_config.json",??#?保存的json配置文件
          ??????????????????????dest="new_page_demo.html")??#?新HTML文件名稱

          jupyter notebook中再運(yùn)行一次,這樣我們就將圖形的格式固定下來了。通過這種方式我們可以設(shè)置圖形的任意大小和位置,部分截圖如下:

          本文結(jié)合各種圖形的簡(jiǎn)單制作,最終使用 Page 將各種圖形組合在一起,形成了一個(gè)可視化看板的效果,希望對(duì)大家掌握 Pyecharts 的使用有所幫助,真正在實(shí)際工作中使用到 Pyecharts 這個(gè)視化神器。


          作者簡(jiǎn)介

          Peter,碩士畢業(yè)僧一枚,從電子專業(yè)自學(xué)Python入門數(shù)據(jù)行業(yè),擅長(zhǎng)數(shù)據(jù)分析及可視化。喜歡數(shù)據(jù),堅(jiān)持跑步,熱愛閱讀,樂觀生活。個(gè)人格言:不浮于世,不負(fù)于己

          個(gè)人站點(diǎn):www.renpeter.cn,歡迎常來小屋逛逛

          往期精彩回顧





          獲取本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開:

          https://t.zsxq.com/qFiUFMV

          本站qq群704220115。

          加入微信群請(qǐng)掃碼:

          瀏覽 111
          點(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>
                  午夜色色色 | 日本在线东京热 | 大屌狠狠操 | 国产啊v视频 | 狠狠色婷婷|