本文是為了幫助大家快速掌握十大頂級繪圖方法,重點解釋數據是如何呈現在不同類型圖中。
使用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')