pyecharts 是一個用於生成 Echarts 圖表的類庫。Echarts 是百度開源的一個數據可視化 JS 庫。用 Echarts 生成的圖可視化效果非常棒,爲了與 Python 進行對接,方便在 Python 中直接使用數據生成圖,我寫了這個項目。以下是最新版echart的靚圖。當然,pyecharts貌似沒有這麼齊全。
- 官方文檔:http://pyecharts.herokuapp.com/
- pyecharts 圖表配置:http://pyecharts.org/#/zh-cn/prepare
- github:https://github.com/pyecharts/pyecharts
安裝:
pip install pyecharts
還有很多已經打包好的中國地圖、世界地圖包:
$ pip install echarts-countries-pypkg
$ pip install echarts-china-provinces-pypkg
$ pip install echarts-china-cities-pypkg
$ pip install echarts-china-counties-pypkg
$ pip install echarts-china-misc-pypkg
$ pip install echarts-united-kingdom-pypkg
目 錄
一、簡單示例
from pyecharts import Bar
attr = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
v1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]
v2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]
bar = Bar("Bar chart", "precipitation and evaporation one year")
bar.add("precipitation", attr, v1, mark_line=["average"], mark_point=["max", "min"])
bar.add("evaporation", attr, v2, mark_line=["average"], mark_point=["max", "min"])
bar.render()
#bar
其中,bar.render()
,是以html形式保存在本地文件中; bar
,是在當前環境下,輸出圖表。
輸出方式還有PDF:
bar.render(path="render.png")
同時也可以使用flask/Django進行封裝,
二、筆者關注的幾個圖表
2.1 畫出花樣的散點圖
from pyecharts import EffectScatter
es = EffectScatter("動態散點圖各種圖形示例")
es.add("", [10], [10], symbol_size=20, effect_scale=3.5,
effect_period=3, symbol="pin")
es.add("", [20], [20], symbol_size=12, effect_scale=4.5,
effect_period=4,symbol="rect")
es.add("", [30], [30], symbol_size=30, effect_scale=5.5,
effect_period=5,symbol="roundRect")
es.add("", [40], [40], symbol_size=10, effect_scale=6.5,
effect_brushtype='fill',symbol="diamond")
es.add("", [50], [50], symbol_size=16, effect_scale=5.5,
effect_period=3,symbol="arrow")
es.add("", [60], [60], symbol_size=6, effect_scale=2.5,
effect_period=3,symbol="triangle")
es
2.2 關係圖 + NetworkX
from pyecharts import Graph
nodes = [{"name": "結點1", "symbolSize": 10},
{"name": "結點2", "symbolSize": 20},
{"name": "結點3", "symbolSize": 30},
{"name": "結點4", "symbolSize": 40},
{"name": "結點5", "symbolSize": 50},
{"name": "結點6", "symbolSize": 40},
{"name": "結點7", "symbolSize": 30},
{"name": "結點8", "symbolSize": 20}]
links = []
for i in nodes:
for j in nodes:
links.append({"source": i.get('name'), "target": j.get('name')})
graph = Graph("關係圖-力引導佈局示例")
graph.add("", nodes, links, is_label_show=True,
graph_repulsion=8000, graph_layout='circular',
label_text_color=None)
graph
其中,pyecharts處理不了太複雜的關係圖,可以借用: networkx 庫(可參考筆者的博文:關係圖︱python 關係網絡的可視化NetworkX(與Apple.Turicreate深度契合))
from __future__ import unicode_literals
import networkx as nx
from networkx.readwrite import json_graph
from pyecharts import Graph
g = nx.Graph()
categories = ['網關', '節點']
g.add_node('FF12C904', name='Gateway 1', symbolSize=40, category=0)
g.add_node('FF12CA02', name='Node 11', category=1)
g.add_node('FF12C326', name='Node 12', category=1)
g.add_node('FF45C023', name='Node 111', category=1)
g.add_node('FF230933', name='Node 1111', category=1)
g.add_edge('FF12C904', 'FF12CA02')
g.add_edge('FF12C904', 'FF12C326')
g.add_edge('FF12CA02', 'FF45C023')
g.add_edge('FF45C023', 'FF230933')
g_data = json_graph.node_link_data(g)
eg = Graph('設備最新拓撲圖')
eg.add('Devices', nodes=g_data['nodes'], links=g_data['links'], categories=categories)
# eg.show_config()
eg
2.3 WordCloud(詞雲圖)
from pyecharts import WordCloud
name = [
'Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', 'Charter Communications',
'Chick Fil A', 'Planet Fitness', 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp',
'Lena Dunham', 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham',
'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break']
value = [
10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112,
965, 847, 582, 555, 550, 462, 366, 360, 282, 273, 265]
wordcloud = WordCloud(width=1300, height=620)
wordcloud.add("", name, value, word_size_range=[20, 100])
wordcloud
支持中文。
2.4 TreeMap(矩形樹圖)
矩形樹圖是一種常見的表達『層級數據』『樹狀數據』的可視化形式。它主要用面積的方式,便於突出展現出『樹』的各層級中重要的節點。
from pyecharts import TreeMap
treemap = TreeMap("矩形樹圖示例", width=1200, height=600)
import os
import json
with open(os.path.join("..", "json", "treemap.json"), "r", encoding="utf-8") as f:
data = json.load(f)
treemap.add("演示數據", data, is_label_show=True, label_pos='inside')
treemap.render()