實踐案例:十分鐘掌握pyecharts十類頂級圖,都很實用!
本文是爲了幫助大家快速掌握十大頂級繪圖方法,重點解釋 數據 是如何呈現在不同類型圖中。
使用
pip install pyecharts
安裝,安裝後的版本爲
v1.6
pyecharts
幾行代碼就能繪製出有特色的的圖形,繪圖API鏈式調用,使用方便。
1 儀表盤
from pyecharts import charts # 儀表盤 gauge = charts.Gauge() gauge.add('Python小例子', [('Python機器學習', 30), ('Python基礎', 70.), ('Python正則', 90)]) gauge.render(path="./data/儀表盤.html") print('ok')
儀表盤中共展示三項,每項的比例爲30%,70%,90%,如下圖默認名稱顯示第一項:
Python機器學習
,完成比例爲
30%
2 漏斗圖
from pyecharts import options as opts from pyecharts.charts import Funnel, Page from random import randint def funnel_base() -> Funnel: c = ( Funnel() .add("豪車", [list(z) for z in zip(['寶馬', '法拉利', '奔馳', '奧迪', '大衆', '豐田', '特斯拉'], [randint(1, 20) for _ in range(7)])]) .set_global_opts(title_opts=opts.TitleOpts(title="豪車漏斗圖")) ) return c funnel_base().render('./img/car_funnel.html') print('ok')
以7種車型及某個屬性值繪製的漏斗圖,屬性值大越靠近漏斗的大端。
3 日曆圖
import datetime import random from pyecharts import options as opts from pyecharts.charts import Calendar def calendar_interval_1() -> Calendar: begin = datetime.date(2019, 1, 1) end = datetime.date(2019, 12, 27) data = [ [str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)] for i in range(0, (end - begin).days + 1, 2) # 隔天統計 ] calendar = ( Calendar(init_opts=opts.InitOpts(width="1200px")).add( "", data, calendar_opts=opts.CalendarOpts(range_="2019")) .set_global_opts( title_opts=opts.TitleOpts(title="Calendar-2019年步數統計"), visualmap_opts=opts.VisualMapOpts( max_=25000, min_=1000, orient="horizontal", is_piecewise=True, pos_top="230px", pos_left="100px", ), ) ) return calendar calendar_interval_1().render('./img/calendar.html') print('ok')
繪製2019年1月1日到12月27日的步行數,官方給出的圖形寬度
900px
不夠,只能顯示到9月份,本例使用
opts.InitOpts(width="1200px")
做出微調,並且
visualmap
顯示所有步數,每隔一天顯示一次:
4 圖(graph)
import json import os from pyecharts import options as opts from pyecharts.charts import Graph, Page def graph_base() -> Graph: nodes = [ {"name": "cus1", "symbolSize": 10}, {"name": "cus2", "symbolSize": 30}, {"name": "cus3", "symbolSize": 20} ] links = [] for i in nodes: if i.get('name') == 'cus1': continue for j in nodes: if j.get('name') == 'cus1': continue links.append({"source": i.get("name"), "target": j.get("name")}) c = ( Graph() .add("", nodes, links, repulsion=8000) .set_global_opts(title_opts=opts.TitleOpts(title="customer-influence")) ) return c
構建圖,其中客戶點1與其他兩個客戶都沒有關係(
link
),也就是不存在有效邊:
5 水球圖
from pyecharts import options as opts from pyecharts.charts import Liquid, Page from pyecharts.globals import SymbolType def liquid() -> Liquid: c = ( Liquid() .add("lq", [0.67, 0.30, 0.15]) .set_global_opts(title_opts=opts.TitleOpts(title="Liquid")) ) return c liquid().render('./img/liquid.html')
水球圖的取值
[0.67, 0.30, 0.15]
表示下圖中的
三個波浪線
,一般代表三個百分比:
6 餅圖
from pyecharts import options as opts from pyecharts.charts import Pie from random import randint def pie_base() -> Pie: c = ( Pie() .add("", [list(z) for z in zip(['寶馬', '法拉利', '奔馳', '奧迪', '大衆', '豐田', '特斯拉'], [randint(1, 20) for _ in range(7)])]) .set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例")) .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) ) return c pie_base().render('./img/pie_pyecharts.html')
7 極座標
import random from pyecharts import options as opts from pyecharts.charts import Page, Polar def polar_scatter0() -> Polar: data = [(alpha, random.randint(1, 100)) for alpha in range(101)] # r = random.randint(1, 100) print(data) c = ( Polar() .add("", data, type_="bar", label_opts=opts.LabelOpts(is_show=False)) .set_global_opts(title_opts=opts.TitleOpts(title="Polar")) ) return c polar_scatter0().render('./img/polar.html')
極座標表示爲
(夾角,半徑)
,如(6,94)表示"夾角"爲6,半徑94的點:
8 詞雲圖
from pyecharts import options as opts from pyecharts.charts import Page, WordCloud from pyecharts.globals import SymbolType words = [ ("Python", 100), ("C++", 80), ("Java", 95), ("R", 50), ("JavaScript", 79), ("C", 65) ] def wordcloud() -> WordCloud: c = ( WordCloud() # word_size_range: 單詞字體大小範圍 .add("", words, word_size_range=[20, 100], shape='cardioid') .set_global_opts(title_opts=opts.TitleOpts(title="WordCloud")) ) return c wordcloud().render('./img/wordcloud.html')
("C",65)
表示在本次統計中C語言出現65次
9 系列柱狀圖
from pyecharts import options as opts from pyecharts.charts import Bar from random import randint def bar_series() -> Bar: c = ( Bar() .add_xaxis(['寶馬', '法拉利', '奔馳', '奧迪', '大衆', '豐田', '特斯拉']) .add_yaxis("銷量", [randint(1, 20) for _ in range(7)]) .add_yaxis("產量", [randint(1, 20) for _ in range(7)]) .set_global_opts(title_opts=opts.TitleOpts(title="Bar的主標題", subtitle="Bar的副標題")) ) return c bar_series().render('./img/bar_series.html')
10 熱力圖
import random from pyecharts import options as opts from pyecharts.charts import HeatMap def heatmap_car() -> HeatMap: x = ['寶馬', '法拉利', '奔馳', '奧迪', '大衆', '豐田', '特斯拉'] y = ['中國','日本','南非','澳大利亞','阿根廷','阿爾及利亞','法國','意大利','加拿大'] value = [[i, j, random.randint(0, 100)] for i in range(len(x)) for j in range(len(y))] c = ( HeatMap() .add_xaxis(x) .add_yaxis("銷量", y, value) .set_global_opts( title_opts=opts.TitleOpts(title="HeatMap"), visualmap_opts=opts.VisualMapOpts(), ) ) return c heatmap_car().render('./img/heatmap_pyecharts.html')
覺得不錯,點個在看唄!