使用 python 調用 echart 畫圖
前言
之前說了如何使用阿里雲的 SDK 獲取雲存儲的值然後發送表格郵件,但是最近領導又發話了,說這個郵件每天一封看的有點審美疲勞,要順應「數據可視化」的趨勢,於是就要求畫圖,力求直觀。要做到「從眾多數據中突出特別數據,從特別數據中突出高價值數據」。我之前用 python 的 matplotlib 畫過(https://rorschachchan.github.io/2018/02/27/使用matplotlib畫圖的一個腳本/),這一次嘗試用 echart 來做圖!
echart 是不太良心的百度良心的開源作品,提供各種各樣精美的作圖方案,分分鐘把圖片做的高大上,吸引周圍人的目光。不過我對前端的了解非常淺薄,但是沒關係。這次使用 pyechart 插件!這個插件可以讓 python 直接調用 echart 介面,選擇需要的圖形之後,直接往裡插數據就好,簡單粗暴見效快,而且支持 3D,可以說是居家旅行常備物品。可以說,有了它,作圖能力頂呱呱。感謝開發者大神們的辛苦工作!
作圖
首先先需要安裝 pyecharts 插件,命令是 pip install pyecharts:然後我們就可以寫一個簡單的案例,如下:
#!/usr/bin/env python
#coding=utf-8
from pyecharts import Bar #導入第三方庫
#attr = ["{}day".format(i) for i in range(1, 8)] #這樣的話X坐標就是1day、2day、3day...
attr = ["Mon", "Feb", "Wed", "Thu", "Fri", "Sat", "Sun"] #這樣X坐標就是星期
v1 = [1.49, 2.09, 4.03, 2.23, 5.26, 7.71, 7.56]
v2 = [0.3, 0.9, 0.2, 0.4, 0.7, 0.7, 0.6]
v3 = [18.15, 13.22, 11.28, 17.99, 18.7, 19.7, 15.6]
bar = Bar("XXX情況總覽", "本圖表展示過去一周的ABC情況") #這裡是主標題和副標題
bar.add("A值", attr, v1, mark_line=["average"], mark_point=["max", "min"]) #每一個值的名稱以及要展現平均值和最大最小值
bar.add("B值", attr, v2, mark_line=["average"], mark_point=["max", "min"])
bar.add("C值", attr, v3, mark_line=["average"], mark_point=["max", "min"])
bar.render("/tmp/111.html") #在/tmp文件夾里生成一個111.html文件
如果伺服器里有 nginx,那麼把這個 html 文件放到 nginx/html 路徑里,再在瀏覽器里打開就會看到這樣的圖,我這裡就直接把 html 拽到 windows 里打開了:
而且還可以通過點擊網頁上「A 值」、「B 值」、「C 值」就可以達到屏蔽相應值的效果,而且如果點擊紅色箭頭的「數據視圖」,還可以直接看到對應的數據,非常貼心非常屌,如圖:
如果你覺得圖片有點小,那麼可以修改這個地方:bar = Bar("XXX 情況總覽", "本圖表展示過去一周的 ABC 情況",width=1000,height=900),我這裡把寬和高分別從默認值調成了1000 和 900。
如果想要在一個 html 里展現多個圖,比如要做三個柱狀圖,那麼 example 如下:
#!/usr/bin/env python
#coding=utf-8
from pyecharts import Bar, Grid
attr = ["一班", "二班", "三班", "四班"]
v1 = [54, 81, 32, 32]
v2 = [68, 69, 27, 32]
bar = Bar("贊成票","本圖表展示贊成票情況")
bar.add("年紀長", attr, v1, mark_point=["max", "min"])
bar.add("副年紀長", attr, v2, mark_point=["max", "min"])
attr2 = ["一班", "二班", "三班", "四班"]
x1 = [2, 0, 0, 1]
x2 = [1, 3, 0, 2]
bar2 = Bar("反對票","本圖表展示反對票情況",title_top="bottom",title_color="#1d12eb") #title_color是標題顏色,這個跟html的顏色取值一樣
bar2.add("年紀長", attr2, x1, mark_point=["max", "min"])
bar2.add("副年紀長", attr2, x2, mark_point=["max", "min"])
attr3 = ["一班", "二班", "三班", "四班"]
y1 = [2, 0, 0, 1]
y2 = [2, 0, 0, 1]
bar3 = Bar("棄權票","本圖表展示棄權票情況",title_pos="right",title_color="#eb1212") #title_pos是標題的位置,如果不特殊說明,會重疊
bar3.add("年紀長", attr3, y1, mark_point=["max", "min"])
bar3.add("副年紀長", attr3, y1, mark_point=["max", "min"])
grid = Grid()
grid.add(bar, grid_width="40%", grid_height="30%", grid_bottom="60%", grid_right="55%") #grid_height和grid_width是每一個小圖的大小
grid.add(bar2, grid_width="40%", grid_height="30%", grid_bottom="60%", grid_left="55%") #grid_bottom和grid_top是垂直位置
grid.add(bar3, grid_width="40%", grid_height="30%", grid_top="60%", grid_right="55%") #grid_right和grid_left是水平位置
grid.render("/tmp/grid.html") #在/tmp文件夾里生成一個grid.html文件
上面的數字都是筆者舉例子虛擬的,實際情況中,這些數字都應該是存儲在 redis 這樣的資料庫里,然後取出來使用。
上面的兩個例子僅僅是 pyechart 使用的冰山一角,如果想更多的了解,請去看一下文末 pyechart 的中文說明文檔,裡面內特別豐富!
End
TAG:運維社 |