1. 程式人生 > >python之pyechart

python之pyechart

Echarts是百度視覺化工具,pyecharts 是一個用於生成 Echarts 圖表的類庫。Echarts 是百度開源的一個數據視覺化 JS 庫。用 Echarts 生成的圖視覺化效果非常棒,為了與 Python 進行對接,方便在 Python 中直接使用資料生成圖

官方教程:http://pyecharts.org/#/zh-cn/prepare

支援圖形

Bar(柱狀圖/條形圖) 
Bar3D(3D 柱狀圖) 
Boxplot(箱形圖) 
EffectScatter(帶有漣漪特效動畫的散點圖) 
Funnel(漏斗圖) 
Gauge(儀表盤) 
Geo(地理座標系) 
Graph(關係圖) 
HeatMap(熱力圖) 
Kline(K線圖) 
Line(折線/面積圖) 
Line3D(3D 折線圖) 
Liquid(水球圖) 
Map(地圖) 
Parallel(平行座標系) 
Pie(餅圖) 
Polar(極座標系) 
Radar(雷達圖) 
Sankey(桑基圖) 
Scatter(散點圖) 
Scatter3D(3D 散點圖) 
ThemeRiver(主題河流圖) 
WordCloud(詞雲圖)
 

支援擴充套件包

$ 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
 

pyecharts 支援 Python2.7+ 和 Ptyhon3.5+。如果你使用的是 Python2.7,請在程式碼頂部宣告字元編碼,否則會出現中文亂碼問題。

#coding=utf-8
from __future__ import unicode_literals

pip 安裝

$ pip install pyecharts

原始碼安裝

$ git clone https://github.com/pyecharts/pyecharts.git
$ cd pyecharts
$ pip install -r requirements.txt
$ python setup.py install

地圖外掛

自從 v0.3.2 開始,為了縮減專案本身的體積以及維持 pyecharts 專案的輕量化執行,pyecharts 將不再自帶地圖 js 檔案。想使用地圖的開發者必須

自己手動安裝地圖外掛。具體參考 自定義地圖篇

首先開始來繪製你的第一個圖表

from pyecharts import Bar

bar = Bar("我的第一個圖表", "這裡是副標題")
bar.add("服裝", ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"], [5, 20, 36, 10, 75, 90])
# bar.print_echarts_options() # 該行只為了列印配置項,方便除錯時使用
bar.render()    # 生成本地 HTML 檔案

guide-0

  • add()
    主要方法,用於新增圖表的資料和設定各種配置項
  • print_echarts_options()
    列印輸出圖表的所有配置項
  • render()
    預設將會在根目錄下生成一個 render.html 的檔案,支援 path 引數,設定檔案儲存位置,如 render(r"e:\my_first_chart.html"),檔案用瀏覽器開啟。

Note: 可以按右邊的下載按鈕將圖片下載到本地,如果想要提供更多實用工具按鈕,請在 add() 中設定 is_more_utils 為 True

from pyecharts import Bar

bar = Bar("我的第一個圖表", "這裡是副標題")
bar.add("服裝", 
        ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"], [5, 20, 36, 10, 75, 90],
        is_more_utils=True)
bar.render()

guide-1

使用主題

自 0.5.2+ 起,pyecharts 支援更換主體色系。下面是跟換為 'dark' 的例子:

from pyecharts import Bar

bar = Bar("我的第一個圖表", "這裡是副標題")
bar.use_theme('dark')
bar.add("服裝", ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"], [5, 20, 36, 10, 75, 90])
bar.render()

guide-2

pyecharts 支援另外 5 個主體色系

使用 pyecharts-snapshot 外掛

如果想直接將圖片儲存為 png, pdf, gif 格式的檔案,可以使用 pyecharts-snapshot。使用該外掛請確保你的系統上已經安裝了 Nodejs 環境。

  1. 安裝 phantomjs $ npm install -g phantomjs-prebuilt
  2. 安裝 pyecharts-snapshot $ pip install pyecharts-snapshot
  3. 呼叫 render 方法 bar.render(path='snapshot.png') 檔案結尾可以為 svg/jpeg/png/pdf/gif。請注意,svg 檔案需要你在初始化 bar 的時候設定 renderer='svg'。

更多內容請移步至 pyecharts-snapshot

圖形繪製過程

圖表類提供了若干了構建和渲染的方法,在使用的過程中,建議按照以下的順序分別呼叫:

步驟 描述 程式碼示例 備註
1 例項一個具體型別圖表的物件 chart = FooChart()  
2 為圖表新增通用的配置,如主題 chart.use_theme()  
3 為圖表新增特定的配置 geo.add_coordinate()  
4 新增資料及配置項 chart.add() 參考 資料解析與匯入篇
5 生成本地檔案(html/svg/jpeg/png/pdf/gif) chart.render()

從 v0.5.9 開始,以上涉及的方法均支援鏈式呼叫。例如:

from pyecharts import Bar

CLOTHES = ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]
clothes_v1 = [5, 20, 36, 10, 75, 90]
clothes_v2 = [10, 25, 8, 60, 20, 80]

(Bar("柱狀圖資料堆疊示例")
    .add("商家A", CLOTHES, clothes_v1, is_stack=True)
    .add("商家B", CLOTHES, clothes_v2, is_stack=True)
    .render())

多次顯示圖表

從 v0.4.0+ 開始,pyecharts 重構了渲染的內部邏輯,改善效率。推薦使用以下方式顯示多個圖表。

from pyecharts import Bar, Line
from pyecharts.engine import create_default_environment

bar = Bar("我的第一個圖表", "這裡是副標題")
bar.add("服裝", ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"], [5, 20, 36, 10, 75, 90])

line = Line("我的第一個圖表", "這裡是副標題")
line.add("服裝", ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"], [5, 20, 36, 10, 75, 90])

env = create_default_environment("html")
# 為渲染建立一個預設配置環境
# create_default_environment(filet_ype)
# file_type: 'html', 'svg', 'png', 'jpeg', 'gif' or 'pdf'

env.render_chart_to_file(bar, path='bar.html')
env.render_chart_to_file(line, path='line.html')

相比第一個例子,該程式碼只是使用同一個引擎物件,減少了部分重複操作,速度有所提高。

Pandas&Numpy 簡單示例

如果使用的是 Numpy 或者 Pandas,可以參考這個示例

pandas-numpy

Note: 使用 Pandas&Numpy 時,整數型別請確保為 int,而不是 numpy.int32

當然你也可以採用更加酷炫的方式,使用 Jupyter Notebook 來展示圖表,matplotlib 有的,pyecharts 也會有的

Note: 從 v0.1.9.2 版本開始,廢棄 render_notebook() 方法,現已採用更加 pythonic 的做法。直接呼叫本身例項就可以了。

比如這樣

notebook-0

還有這樣

notebook-1

如果使用的是自定義類,直接呼叫自定義類示例即可

notebook-2