Pyecharts 組合圖形繪製實踐

2021-01-17 Python數據之道

Pyecharts 組合圖形繪製實踐

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

有同學提了一個問題,在 Pyecharts 中如何繪製多個圖形,今天我們來分享下組合圖的繪製。

在實際的工作需求中,我們經常需要繪製多個甚至多種不同類型的圖形,有時候還需要將它們放在一個頁面中,達到一個可視化看板的效果。

在本文中將利用 pyecharts 來實現這個需求,同時滿足動態可視化的效果,再次感受這個可視化神器的強大之處,讓你真正愛上它。

01 環境pyecharts-jupyter-installer 0.0.3

這裡提醒下:

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

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

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

在安裝的時候可以直接指定版本號,防止出意外

02 單個圖形製作

在下面的文章部門我們先逐個繪製多種不同的圖形,這些圖形的繪製不會涉及到太多的配置項,本文中的重點是如何將不同類型的圖形組合在一起。這些圖形包含:

導入庫

在進行繪製數據處理和繪圖之前,我們還是需要先導入各種庫:

from pyecharts.globals import CurrentConfig, OnlineHostType   # 事先導入,防止不出圖
from pyecharts import options as opts  # 配置項
from pyecharts.charts import Bar, Pie, Line, HeatMap, Funnel, Gauge, Grid, Page  # 各個圖形的類
from pyecharts.faker import Faker  # 自身數據
from pyecharts.commons.utils import JsCode   
from pyecharts.globals import ThemeType,SymbolType

import pandas as pd
import numpy as np
import random

模擬數據

首先我們模擬一份簡單的數據:通過下面的方式我們可以掌握如何利用pandas快速生成一個DataFrame數據

柱狀圖

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

bar = (
    Bar()
    .add_xaxis(df['消費'].tolist())
    .add_yaxis("5大開支",df['數據'].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['消費'].tolist(), df['數據'].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['消費'].tolist())
    .add_yaxis("月度開支", df['數據'].tolist())
    .set_global_opts(title_opts=opts.TitleOpts(title="Line-月度開支"))
)

line.render_notebook()

熱力圖

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

print(Faker.week)
print(Faker.clock)

# 0-50 的隨機數+列表推導式

# 兩層的列表推導式
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(),
    )
)

heatmap.render_notebook()

熱力圖視頻:

漏鬥圖

漏鬥圖在用戶畫像中運用的非常廣,尤其是在電商領域中,從訪問、瀏覽到最終的支付成功等一系列的操作構成一個漏鬥,在這裡我們模擬一份數據來繪製漏鬥圖,先生成一個模擬數據:

繪圖代碼如下:

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

漏鬥圖視頻:

儀錶盤

在這裡我們採用官方中的一個實例來製作簡單的儀錶盤:

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

gauge.render_notebook()

03 組合繪圖

在上面我們通過不同的方法繪製出了各種不同的圖形,都是動態可視化的,非常精美的。下面我們通過 Page 類來將上面的多種圖形來放到一個可視化看板中。

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

# 1、柱狀圖
def barPage() -> Bar: 
    bar = (
        Bar()
        .add_xaxis(df['消費'].tolist())
        .add_yaxis("5大開支",df['數據'].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['消費'].tolist(), df['數據'].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['消費'].tolist())
        .add_yaxis("月度開支", df['數據'].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個圖形的代碼,下面利用Page進行組合
# !!! 關鍵步驟
page = (
    Page(layout=Page.DraggablePageLayout)
    .add(
        barPage(),
        piePage(),
        linePage(),
        funnelPage(),
        heatmapPage(),
        gaugePage())
)

page.render("page_demo.html")

2、現在解釋一下上面的代碼:

柱狀圖、餅圖等不同的圖形我們封裝成不同的函數來實現最後使用page.render()來生成一個html文件,就是我們的各個圖形下一個html頁面中

現在看看生成的組合圖形1的效果

組合圖形1:

在目前生成的組合圖形1中,要注意4點:

左上角有個save config的按鈕,接下來這個按鈕大有用處整體的圖形是單個上下排列的,且整體靠左,右邊很多的空白每個圖形都是虛線框,這表示圖形可變大小,同時可以移動的

下面我們通過save config按鈕來進行改動,生成一個我們自己想看到的組合圖形2效果:

組合圖形2:

當我們把圖形按照我們的需求排列OK之後,此時圖形仍然沒有被固定下來,如果我們刷新當前頁面,又會變成組合圖形1的效果。

現在點擊save config按鈕,保存我們的配置文件。此時會在本地當前目錄下生成一個chart_config.json的配置文件。

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

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

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

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

相關焦點

  • 獨家 | pyecharts V1.0.0 版本正式發布
    pyecharts 經過了半年的沉寂後,終於發布了新版本啦!新版本號將從 v1.0.0 開始,這是一個全新的,向下不兼容的 pyecharts 版本。不過如果開發者以前接觸過 pyecharts 的話,新版本對於你們來說也是會很容易上手的。新版本修復 N 個 0.5.x 版本留下來的 bug。
  • R語言從入門到精通:Day8-圖形繪製
    上期的最後,給大家預告了一部分本次教程的內容:圖形的組合,除此之外,我們在講講基本圖形的繪製(條形圖、散點圖、餅圖、直方圖等),趕緊開始battle起來吧~~  本篇教程,內容十分豐富,雖然是單篇,大家務必多多練習,可以充當一周的學習內容,靜下心來慢慢吸收。
  • 辦公軟體如何使用插入形狀繪製需要的圖形
    插入菜單插入形狀中圖形有很多各種不同形狀的圖形,繪製單個圖形是簡單的。但在實際應用中都是多個圖形的結合使用,繪製出需要的圖形出來,還要進行必要的一些調整。在一般的文檔資料中用得不多,但在幾何、物理、數字等的資料中經常會用到。如果你的美術水平還行可以繪製各種各樣的圖形出來。
  • Figma繪製圖表插件:NB Charts今日上線
    中文官方網站:https://www.pslkzs.com▲ 網站入口在我主頁的右上角 www.pslkzs.com英文官方網站:https://www.nbcharts.com我們不說廢話,看看這款神器的殺傷力: 注意:以下操作為正常錄屏,沒有快進
  • 五年級數學上冊《組合圖形的面積》教案
    教學內容:新課標五年級上冊92頁———組合圖形的面積教學目標:1、了解組合圖形的面積的計算方法並能正確地進行計算2、培養學生的識圖能力和分析能力>一、 複習導入:(1)多媒體1展示已學過的平面圖形:長方形、正方形、平行四邊形、三角形、梯形,學生分別說出其面積公式(2)多媒體2展示幾個組合圖形,藉機問這些圖形與前面的圖形有什麼不同,得出組合圖形由幾個簡單的圖形組合而成(3)對於這些組合圖形,它們的面積怎樣計算呢
  • 小學數學中「怪異」組合圖形的解構方法
    「怪異」組合圖形的重要性小學數學所涵蓋的幾何圖形大部分比較簡單,有一小部分則比較複雜。複雜的圖形都是多種單一圖形的組合,這些圖形有的看上去很怪異,很令人費解,以小學生的識圖能力來解構它們,確實是困難重重。
  • 圖形太枯燥乏味?試試錯視圖形
    文/李星麗錯視圖形就是利用錯視原理,根據錯視的視覺規律性特徵所創作產生的,利用錯視圖形創作的設計作品與寫實、表現、聯想、象徵的作品不同,由於對形態的構成關係做出了一些巧妙的安排,使得這些純粹的圖形充滿趣味性。
  • Python 30 行代碼畫各種 3D 圖形
    以下是作圖實踐。# 圖形數據構造# MOVETO表示將繪製起點移動到指定坐標# CURVE4表示使用4個控制點繪製3次貝塞爾曲線# CURVE3表示使用3個控制點繪製2次貝塞爾曲線# LINETO表示從當前位置繪製直線到指定位置# CLOSEPOLY表示從當前位置繪製直線到指定位置,並閉合多邊形path_data = [    (Path.MOVETO
  • 原來流程圖也可以這麼簡單繪製
    我們知道流程圖是由很多的特殊符號與圖形組合在一起,以一種簡單的方式表示一件事情的發生過程。而我們都知道教學是一件很嚴謹的事情,很多老師為更有效率地完成教學任務,通過使用流程圖來提高學生的學習興趣,讓課堂變得更加活躍與有趣。今天小編就來教教大家怎樣快速地繪製教學流程。
  • 技術分享 詳解幾種UML圖形的建立步驟
    狀態屬性值的組合,結合行為有關的事件和動作,就可以確定具有特定的行為特徵的狀態。4〉確定狀態可能發生的裝移。注意份已從一個狀態可能轉移到那些狀態,對象的哪些行為可引起狀態的轉移並找出觸發狀態轉移的事件。5〉把必要的動作加到狀態或轉移上。6〉超狀態、子狀態、分支、歷史狀態等概念組織和簡化一個複雜的狀態機。7〉分析狀態的並發和同步情況。8〉繪製狀態圖。