【Python可視化】超詳細Pyecharts 1.x教程,讓你的圖表動起來~
前言
pyecharts 是一個用于生成 Echarts 圖表的Python庫。Echarts是百度開源的一個數據可視化 JS 庫,可以生成一些非??犰诺膱D表。

Pyecharts在1.x版本之后迎來重大更新,與老版本(0.5X)已是兩個完全不同的版本,所以很多小伙伴在使用Pyecharts出現了類似'pyecharts' has no attribute 'xxx'的報錯,那是因為你安裝了1.x的版本卻使用了0.5x的調用方法。
- 當然如果你更習慣使用0.5X版本的可以通過如下語句來進行安裝:
pip install pyecharts==0.5.11 - 安裝1.x版本(僅支持Python 3.6+):
pip install pyecharts
本文將會介紹Pyecharts1.x版本的使用方法,本文所有語句均基于v1.6.2,通過以下語句查詢使用pyecharts版本:
import pyecharts
print(pyecharts.__version__)
基本使用
鏈式調用
pyecharts在v1.x之后支持鏈式調用,具體語句如下:
from pyecharts.charts import Bar
from pyecharts import options as opts
# 示例數據
cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
data1 = [123, 153, 89, 107, 98, 23]
data2 = [56, 77, 93, 68, 45, 67]
# 1.x版本支持鏈式調用
bar = (Bar()
.add_xaxis(cate)
.add_yaxis('電商渠道', data1)
.add_yaxis('門店', data2)
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副標題"))
)
# 在jupyter notebook總渲染
bar.render_notebook()

單獨調用
不習慣鏈式調用的開發者依舊可以單獨調用方法。
# 單獨調用
bar = Bar()
bar.add_xaxis(cate)
bar.add_yaxis('電商渠道', data1)
bar.add_yaxis('門店', data2)
bar.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副標題"))
bar.render_notebook()
全局配置
可以通過全局配置(.set_global_opts():)控制以下區域


使用示例如下:
"""
全局配置項使用示例:
1. 標題 & 副標題
2. 關閉圖例
3. 顯示工具箱
"""
bar = (Bar()
.add_xaxis(cate)
.add_yaxis('電商渠道', data1)
.add_yaxis('門店', data2)
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副標題"),
toolbox_opts=opts.ToolboxOpts(),
legend_opts=opts.LegendOpts(is_show=False))
)
bar.render_notebook()

系列配置
可以通過系列配置(.set_series_opts())控制圖表中的文本,線樣式,標記等,使用示例如下:
"""
系列配置項使用示例:
1. 不顯示數值
2. 標記每個系列的最大值
"""
bar = (Bar()
.add_xaxis(cate)
.add_yaxis('電商渠道', data1)
.add_yaxis('門店', data2)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False),
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),]))
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副標題"))
)
bar.render_notebook()

基本圖表
餅圖
from pyecharts.charts import Pie
from pyecharts import options as opts
# 示例數據
cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
data = [153, 124, 107, 99, 89, 46]
pie = (Pie()
.add('', [list(z) for z in zip(cate, data)],
radius=["30%", "75%"],
rosetype="radius")
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例", subtitle="我是副標題"))
.set_series_opts(label_opts=opts.LabelOpts(formatter=": w0obha2h00%"))
)
pie.render_notebook()

折線圖
from pyecharts.charts import Line
from pyecharts import options as opts
# 示例數據
cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
data1 = [123, 153, 89, 107, 98, 23]
data2 = [56, 77, 93, 68, 45, 67]
"""
折線圖示例:
1. is_smooth 折線 OR 平滑
2. markline_opts 標記線 OR 標記點
"""
line = (Line()
.add_xaxis(cate)
.add_yaxis('電商渠道', data1,
markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]))
.add_yaxis('門店', data2,
is_smooth=True,
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(name="自定義標記點",
coord=[cate[2], data2[2]], value=data2[2])]))
.set_global_opts(title_opts=opts.TitleOpts(title="Line-基本示例", subtitle="我是副標題"))
)
line.render_notebook()

漏斗圖
from pyecharts.charts import Funnel
from pyecharts import options as opts
# 示例數據
cate = ['訪問', '注冊', '加入購物車', '提交訂單', '付款成功']
data = [30398, 15230, 10045, 8109, 5698]
"""
漏斗圖示例:
1. sort_控制排序,默認降序;
2. 標簽顯示位置
"""
funnel = (Funnel()
.add("用戶數", [list(z) for z in zip(cate, data)],
sort_='ascending',
label_opts=opts.LabelOpts(position="inside"))
.set_global_opts(title_opts=opts.TitleOpts(title="Funnel-基本示例", subtitle="我是副標題"))
)
funnel.render_notebook()

熱力圖
from pyecharts.charts import HeatMap
from pyecharts import options as opts
from pyecharts.faker import Faker
import random
# 示例數據
data = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]
heat = (HeatMap()
.add_xaxis(Faker.clock)
.add_yaxis("訪客數",
Faker.week,
data,
label_opts=opts.LabelOpts(is_show=True, position="inside"))
.set_global_opts(
title_opts=opts.TitleOpts(title="HeatMap-基本示例", subtitle="我是副標題"),
visualmap_opts=opts.VisualMapOpts(),
legend_opts=opts.LegendOpts(is_show=False))
)
heat.render_notebook()

日歷圖
from pyecharts.charts import Calendar
from pyecharts import options as opts
import random
import datetime
# 示例數據
begin = datetime.date(2019, 1, 1)
end = datetime.date(2019, 12, 31)
data = [[str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]
for i in range((end - begin).days + 1)]
"""
日歷圖示例:
"""
calendar = (
Calendar()
.add("微信步數", data, calendar_opts=opts.CalendarOpts(range_="2019"))
.set_global_opts(
title_opts=opts.TitleOpts(title="Calendar-基本示例", subtitle="我是副標題"),
legend_opts=opts.LegendOpts(is_show=False),
visualmap_opts=opts.VisualMapOpts(
max_=25000,
min_=1000,
orient="horizontal",
is_piecewise=True,
pos_top="230px",
pos_left="100px",
)
)
)
calendar.render_notebook()

地理系圖表
from pyecharts import options as opts
from pyecharts.charts import Map
import random
province = ['廣東', '湖北', '湖南', '四川', '重慶', '黑龍江', '浙江', '山西', '河北', '安徽', '河南', '山東', '西藏']
data = [(i, random.randint(50, 150)) for i in province]
_map = (
Map()
.add("銷售額", data, "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-基本示例"),
legend_opts=opts.LegendOpts(is_show=False),
visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True),
)
)
_map.render_notebook()

地理熱點圖
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType
import random
province = ['武漢', '十堰', '鄂州', '宜昌', '荊州', '孝感', '黃石', '咸寧', '仙桃']
data = [(i, random.randint(50, 150)) for i in province]
geo = (Geo()
.add_schema(maptype="湖北")
.add("門店數", data,
type_=ChartType.HEATMAP)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(),
legend_opts=opts.LegendOpts(is_show=False),
title_opts=opts.TitleOpts(title="Geo-湖北熱力地圖"))
)
geo.render_notebook()

3D散點圖
from pyecharts import options as opts
from pyecharts.charts import Scatter3D
from pyecharts.faker import Faker
import random
data = [[random.randint(0, 100), random.randint(0, 100), random.randint(0, 100)]
for _ in range(1000)]
scatter3D = (Scatter3D()
.add("", data)
.set_global_opts(
title_opts=opts.TitleOpts("Scatter3D-基本示例"),
visualmap_opts=opts.VisualMapOpts(range_color=Faker.visual_color))
)
scatter3D.render_notebook()

其他特性
xy軸翻轉
from pyecharts.charts import Bar
from pyecharts import options as opts
# 示例數據
cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
data1 = [123, 153, 89, 107, 98, 23]
data2 = [56, 77, 93, 68, 45, 67]
bar = (Bar()
.add_xaxis(cate)
.add_yaxis('電商渠道', data1)
.add_yaxis('門店', data2)
.set_global_opts(title_opts=opts.TitleOpts(title="XY軸翻轉-基本示例", subtitle="我是副標題"))
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.reversal_axis()
)
bar.render_notebook()

組合圖表
from pyecharts import options as opts
from pyecharts.charts import Map, Bar, Grid
from pyecharts.globals import ChartType, ThemeType
import random
province = ['武漢', '十堰', '鄂州', '宜昌', '荊州', '孝感', '黃石', '咸寧', '仙桃']
data = [324, 125, 145, 216, 241, 244, 156, 278, 169]
bar = (Bar()
.add_xaxis(province)
.add_yaxis('營業額', data)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="Grid-Bar")
)
)
line = (Line()
.add_xaxis(province)
.add_yaxis('營業額', data,
markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]))
.set_global_opts(title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"))
)
grid = (
Grid()
.add(bar, grid_opts=opts.GridOpts(pos_bottom="60%"))
.add(line, grid_opts=opts.GridOpts(pos_top="60%"))
)
grid.render_notebook()

主題設置
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType
# 示例數據
cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
data1 = [123, 153, 89, 107, 98, 23]
data2 = [56, 77, 93, 68, 45, 67]
"""
主題設置:
默認white
"""
bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.ROMANTIC))
.add_xaxis(cate)
.add_yaxis('電商渠道', data1)
.add_yaxis('門店', data2)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False),
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),]))
.set_global_opts(title_opts=opts.TitleOpts(title="Theme-ROMANTIC"))
)
bar.render_notebook()

時間軸
from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.globals import ThemeType
import random
# 示例數據
cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
tl = Timeline()
for i in range(2015, 2020):
bar = (
Bar()
.add_xaxis(cate)
.add_yaxis("線上", [random.randint(50, 150) for _ in cate])
.add_yaxis("門店", [random.randint(100, 200) for _ in cate])
.set_global_opts(title_opts=opts.TitleOpts("手機品牌{}年營業額".format(i)))
)
tl.add(bar, "{}年".format(i))
tl.render_notebook()

航線圖
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType, SymbolType, ThemeType
import requests
r = requests.get('https://echarts.baidu.com/examples/data-gl/asset/data/flights.json')
data = r.json()
city = ['Beijing']
airports_code = []
geo = Geo(init_opts=opts.InitOpts(theme=ThemeType.DARK))
for i, airport in enumerate(data['airports']):
if airport[1] in city:
geo.add_coordinate(i, airport[3], airport[4])
airports_code.append(i)
route = [(x, y) for _, x, y in data['routes'] if x in airports_code]
geo.add_schema(maptype="world",
itemstyle_opts=opts.ItemStyleOpts())
geo.add("geo", route,
is_large = True,
symbol_size=0,
type_='lines',
is_polyline=True,
effect_opts=opts.EffectOpts(symbol='pin', symbol_size=1, trail_length=1, color="rgba(255,69,0,0.9)"),
linestyle_opts=opts.LineStyleOpts(curve=0.2, width=0.2, color='rgb(245,245,245)',opacity=0.05)
)
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
geo.set_global_opts(title_opts=opts.TitleOpts(title="北京發出所有航線"),
legend_opts=opts.LegendOpts(is_show=False))
geo.render_notebook()

整理不易,歡迎點贊收藏???
有任何問題歡迎添加微信:kinnnnngjames,備注博客園~
浙公網安備 33010602011771號