咱們都知道python上的一款可視化工具 matplotlib , 可是它是靜態的。後來發現了 pyecharts 模塊,簡直好用到不行,可視化類型很是多,它是基於 Echarts 開發的。html
Echarts 是百度開源的一個數據可視化 JS 庫,憑藉着良好的交互性,精巧的圖表設計,獲得了衆多開發者的承認。而 Python,很適合用於數據處理。當數據分析趕上數據可視化時,pyecharts 就誕生了。python
下面帶你們快速瞭解 pyecharts 以及基本使用方法:git
1pip install pyecharts
複製代碼
注意:pyecharts 共有兩個版本,v0.5.X 和 V1.0.X 間徹底不兼容,且v0.5.X版本做者已經不維護了,請使用V1.0.Xgithub
柱狀圖對應的模塊是 Bar 除此以外能夠設置全局配置和系列配置項。配置項都是基於 options編程
示例代碼:瀏覽器
1# coding: utf-8
2from example.commons import Faker
3from pyecharts import options as opts
4from pyecharts.charts import Bar
5
6def bar_base():
7
8 bar = Bar(init_opts=opts.InitOpts(page_title="bar頁面")) # 設置html頁面標題
9 # bar.add_xaxis(["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]) # 設置x軸的參數
10
11 bar.add_xaxis(Faker.choose())
12 bar.add_yaxis("A", Faker.values())
13 bar.add_yaxis("B", Faker.values())
14
15 # 設置全局配置項,可選
16 bar.set_global_opts(opts.TitleOpts(title="主標題", subtitle="副標題"))
17 # render 會生成本地 HTML 文件,默認會在當前目錄生成 render.html 文件
18 bar.render("bar.html") # 也能夠本身指定文件名
19
20if __name__ == "__main__":
21 bar_base()
複製代碼
運行代碼後會在當前目錄生成一個 」bar.html「 的文件,咱們在瀏覽器中打開它。效果圖以下:bash
、生成的頁面支持-點擊取消顯示某 Series微信
除了上述的使用方法以外,pyecharts 全部方法均支持鏈式調用!echarts
代碼以下:框架
1 def bar_reversal_axis() -> Bar:
2
3 # pyecharts 全部方法均支持鏈式調用。
4 c = (
5 Bar(init_opts=opts.InitOpts(page_title="bar頁面"))
6 .add_xaxis(Faker.choose())
7 .add_yaxis("商家A", Faker.values())
8 .add_yaxis("商家B", Faker.values())
9 .reversal_axis()
10 .set_global_opts(toolbox_opts=opts.ToolboxOpts()) # 設置工具箱配置項
11 .set_series_opts(label_opts=opts.LabelOpts(position="right")) # 系列配置項
12 .set_global_opts(title_opts=opts.TitleOpts(title="Bar-翻轉 XY 軸")) # 全局配置項
13 )
14 return c
15
16
17if __name__ == "__main__":
18 bar_reversal_axis().render("bar.html")
複製代碼
效果圖以下:
同個類目軸上系列配置相同的 stack 值能夠堆疊放置
例如堆疊放置A,B的代碼以下:
1 def bar_stack1() -> Bar:
2 c = (
3 Bar()
4 .add_xaxis(Faker.choose())
5
6 # 數據堆疊,同個類目軸上系列配置相同的 stack 值能夠堆疊放置。
7 # stack: Optional[str] = None,
8 .add_yaxis("A", Faker.values(), stack="stack1")
9 .add_yaxis("B", Faker.values(), stack="stack1")
10 .add_yaxis("C", Faker.values())
11 .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
12 .set_global_opts(title_opts=opts.TitleOpts(title="Bar-堆疊數據(部分)"))
13 )
14 return c
複製代碼
1 def bar_datazoom_slider() -> Bar:
2 c = (
3 Bar(init_opts=opts.InitOpts(page_title="bar頁面"))
4 .add_xaxis(Faker.days_attrs)
5 .add_yaxis("商家A", Faker.days_values)
6 .set_global_opts(
7 title_opts=opts.TitleOpts(title="Bar-DataZoom(slider-水平)"),
8 datazoom_opts=[opts.DataZoomOpts(type_="slider",)]
9 )
10 )
11 return c
複製代碼
效果圖以下:
區域縮放配置項的設置方法在 DataZoomOpts 類中,咱們能夠點進去查看源碼:
其中,主要用到的參數含義以下:
1 type_: str = "slider", # 組件類型,可選 "slider", "inside"
2 # 拖動時,是否實時更新系列的視圖。若是設置爲 false,則只在拖拽結束的時候更新。
3 is_realtime: bool = True,
4
5 # 佈局方式是橫仍是豎。可選值爲:'horizontal', 'vertical'
6 orient: str = "horizontal",
複製代碼
知道參數的含義後咱們能夠來試試效果
好比咱們要將區域縮放佈局改成豎,將 orient 定義爲 vertical 便可,代碼就不展現,能夠本身動手試試!
效果圖以下:
熱力圖主要經過顏色去表現數值的大小,必需要配合 visualMap 組件使用。 直角座標系上必需要使用兩個類目軸。
熱力圖使用的方法函數是 add_yaxis,下面是函數的用法說明:
i 1def add_yaxis(
2 # 系列名稱,用於 tooltip 的顯示,legend 的圖例篩選。
3 series_name: str,
4
5 # Y 座標軸數據
6 yaxis_data: Sequence,
7
8 # 系列數據項
9 value: Sequence,
10
11 # 是否選中圖例
12 is_selected: bool = True,
13
14 # 使用的 x 軸的 index,在單個圖表實例中存在多個 x 軸的時候有用。
15 xaxis_index: Optional[Numeric] = None,
16
17 # 使用的 y 軸的 index,在單個圖表實例中存在多個 y 軸的時候有用。
18 yaxis_index: Optional[Numeric] = None,
19
20 # 標籤配置項,參考 `series_options.LabelOpts`
21 label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
22
23 # 標記點配置項,參考 `series_options.MarkPointOpts`
24 markpoint_opts: Union[opts.MarkPointOpts, dict, None] = None,
25
26 # 標記線配置項,參考 `series_options.MarkLineOpts`
27 markline_opts: Union[opts.MarkLineOpts, dict, None] = None,
28
29 # 提示框組件配置項,參考 `series_options.TooltipOpts`
30 tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
31
32 # 圖元樣式配置項,參考 `series_options.ItemStyleOpts`
33 itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
34
35
複製代碼
其中series_name, yaxis_data, value 是三個必傳參數 示例代碼以下:
import random
from example.commons import Faker
from pyecharts import options as opts
from pyecharts.charts import HeatMap
def heatmap_base() -> HeatMap:
value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]
c = (
HeatMap()
.add_xaxis(Faker.clock)
.add_yaxis("series", Faker.week, value)
.set_global_opts(title_opts=opts.TitleOpts(title="HeatMap-基本示例"),
visualmap_opts=opts.VisualMapOpts(), )
)
return c
if __name__ == "__main__":
heatmap_base().render("heatMap.html")
複製代碼
效果圖以下:
詞雲圖用的的方法函數是 add,使用方法以下:
1 def add( 2 # 系列名稱,用於 tooltip 的顯示,legend 的圖例篩選。 3 series_name: str, 4 5 # 系列數據項,[(word1, count1), (word2, count2)] 6 data_pair: Sequence, 7 8 # 詞雲圖輪廓,有 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star' 可選 9 shape: str = "circle", 10 11 # 單詞間隔 12 word_gap: Numeric = 20, 13 14 # 單詞字體大小範圍 15 word_size_range=None, 16 17 # 旋轉單詞角度 18 rotate_step: Numeric = 45, 19 20 # 提示框組件配置項,參考 `series_options.TooltipOpts` 21 tooltip_opts: Union[opts.TooltipOpts, dict, None] = None, 22 23 複製代碼
其中series_name, data_pair, shape 是三個必傳參數 示例代碼以下:
# coding: utf-8
import random
from pyecharts.charts import WordCloud
from pyecharts import options as opts
words = [
("火箭", 10000),
("勇士庫裏", 8888),
("在你寫這個教程以前,我已經會用了", 6181),
("哈登", 6386),
("金州拉文", 5055),
("杜蘭特", 6467),
("戳眼", 2244),
("NBA", 1868),
("季後賽", 1484),
("約老師", 1112),
("利拉德", 865),
("雙卡雙待", 847),
("字母歌MVP", 5582),
("卡哇伊", 555),
("猛龍", 550),
("大帝", 462),
("西蒙斯不投三分", 366),
("JB", 360),
("科爾垃圾", 282),
("格林公式", 273),
("歐文", 2650),
]
def wordcloud_base() -> WordCloud:
c = (
WordCloud()
.add("", words, word_size_range=[20, 50], shape="diamond", word_gap=10)
.set_global_opts(title_opts=opts.TitleOpts(title="WordCloud-shape-diamond"))
)
return c
if __name__ == "__main__":
wordcloud_base().render("wordCloud.html")
複製代碼
效果圖以下:
前面咱們講的幾種圖形生成方法,最後都保存成 html文件,pyecharts 還提供了保存爲圖片的方式
須要安裝 snapshot_selenium,同時須要將瀏覽器驅動保存路徑 cheromdriver.exe 加入到環境變量中
1pip install snapshot_selenium
複製代碼
示例代碼以下:
1 # coding: utf-8
2 import random
3
4 from pyecharts.charts import WordCloud
5 from pyecharts import options as opts
6 from snapshot_selenium import snapshot as driver
7 from pyecharts.render import make_snapshot
8
9 words = [
10 ("火箭", 10000),
11 ("勇士庫裏", 8888),
12 ("在你寫這個教程以前,我已經會用了", 6181),
13 ("哈登", 6386),
14 ("金州拉文", 5055),
15 ("杜蘭特", 6467),
16 ("戳眼", 2244),
17 ("NBA", 1868),
18 ("季後賽", 1484),
19 ("約老師", 1112),
20 ("利拉德", 865),
21 ("雙卡雙待", 847),
22 ("字母歌MVP", 5582),
23 ("卡哇伊", 555),
24 ("猛龍", 550),
25 ("大帝", 462),
26 ("西蒙斯不投三分", 366),
27 ("JB", 360),
28 ("科爾垃圾", 282),
29 ("格林公式", 273),
30 ("歐文", 2650),
31]
32
33
34 def wordcloud_base() -> WordCloud:
35 c = (
36 WordCloud()
37 .add("", words, word_size_range=[20, 50], shape="diamond", word_gap=10)
38 .set_global_opts(title_opts=opts.TitleOpts(title="WordCloud-shape-diamond"))
39 )
40 return c
41
42
43 if __name__ == "__main__":
44 make_snapshot(driver, wordcloud_base().render(), "wordcloud.png")
45 # wordcloud_base().render("wordCloud.html")
複製代碼
最後會在當前目錄生成一張 wordcloud.png 的圖片
1.根據本身想製做的圖形,導入相關的包
2.進行圖表的基礎設置,建立圖表對象
3.須要瞭解該圖表對象下面的函數中參數的含義,及其使用方法
4.配置項主要是在 options中進行配置,有全局配置項和系列配置項,須要瞭解配置項下面對象含義使用方法
5.利用render()方法來報存圖表
pyecharts 還有許多好玩的 3D圖表 和 地圖圖表,因爲篇幅有限,下篇將繼續介紹 地圖系玩法 歡迎關注公衆號: Python編程與實戰!