Python3.7 通過html繪制數(shù)據(jù)可視化圖表

背景:生成數(shù)據(jù)分析報(bào)告時(shí),需要后期自動生成統(tǒng)計(jì)圖,插入報(bào)告中。但其他幾個(gè)可視化工具沒有合適的圖表,查詢相關(guān)資料后,發(fā)現(xiàn)一個(gè)網(wǎng)頁可以生成所需圖表。
目標(biāo):內(nèi)網(wǎng)環(huán)境,將生成的html轉(zhuǎn)化成圖片,并自動插入報(bào)告中。


1、所需圖表

報(bào)告中需要插入一個(gè)類金字塔形的柱狀圖,如下所示:


所需圖片

找了一下echarts,seaborn中都沒有需要的樣式,就很煩。
無意中發(fā)現(xiàn),AntV G2中的這個(gè)圖貌似可以使用的樣子,它長這樣:

AntV G2

如果只是單次使用,直接改數(shù)據(jù)截圖就可以用了。但是本次報(bào)告需要定期更新,所以需要自動化導(dǎo)入數(shù)據(jù)并自動截圖。


2、內(nèi)網(wǎng)環(huán)境打開html

由于本次是在內(nèi)網(wǎng)環(huán)境運(yùn)行的,所有先復(fù)制html文件在內(nèi)網(wǎng)打開,結(jié)果是空白網(wǎng)頁。這是由于網(wǎng)頁內(nèi)部JS未能成功渲染。
打開html文件,找到j(luò)s訪問請求地址,如下所示:

 <div id="container" />
        <script src="https://gw.alipayobjects.com/os/antv/pkg/_antv.g2-3.5.11/dist/g2.min.js"></script>
        <script src="https://gw.alipayobjects.com/os/antv/pkg/_antv.data-set-0.10.2/dist/data-set.min.js"></script>
 <script>

然后復(fù)制地址,下載這兩個(gè)js文件,將文件與此html放入同一路徑下,將上述代碼修改為

<script src="./g2.min.js"></script>
<script src="./data-set.min.js"></script>

然后在內(nèi)網(wǎng)本地打開,就可以正常顯示了。


3、修改插入數(shù)據(jù)

插入數(shù)據(jù)就很簡單了,直接按照統(tǒng)計(jì)邏輯獲取數(shù)據(jù)組,根據(jù)html上本身的要求轉(zhuǎn)化成json或者數(shù)組。


數(shù)據(jù)樣式

要主要的是其中顏色的替換和數(shù)據(jù)顯示的形式。


4、html轉(zhuǎn)化成pdf

安裝使用webdriver,輸入本地html路徑,PDF輸出路徑,就可以將網(wǎng)頁轉(zhuǎn)化成圖片了。

import webdriver

def Html_to_png (url , save_fn ):
    '''
    將html文件轉(zhuǎn)化為png
    '''
    option = webdriver.ChromeOptions()
    option.add_argument('--headless')
    option.add_argument('--disable-gpu')
    option.add_argument("--window-size=1920,1080")
    option.add_argument("--hide-scrollbars")
     
    driver = webdriver.Chrome(chrome_options=option)
     
    driver.get(url)
    print(driver.title)
最終成圖效果
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容