還在用matplotlib畫圖?你out啦

2021-02-20 MeteoAI
概述

進行數據處理的時候,可視化是非常重要的數據分析方式,但是有時候在處理大批量的數據時,由於數據量過多,數據往往會非常密集,而不能發現有效信息,而我們經常使用的matplotlib不能滿足這樣的需求,這就需要交互式的可視化方案,提供比較方便和快捷的數據可視化操作。前幾天在處理數據的時候,需要實現數據可以滑動或者選擇查看,就發現了幾個python實現交互式可視化的庫,跟大家分享一下。
首先簡單介紹一下python的可視化的分類。在Python語言環境裡,有不少可視化解決方案,主要的可以大致分為幾類:

•基於maplotlib的可視化庫,例如經常使用的matplotlib,seaborn以及pandas和scikit-plot的繪圖•基於JavaScript的可視化庫,例如broken,plotly(DASH)以及pyecharts等庫,可以實現交互式的可視化操作•基於上述兩者或其他組合功能的庫,例如holoviews可以和Seaborn,pandas或者broken組合使用下圖是Jake VanderPlas在2017年對python可視化解決方案的總結,有些新的包沒有包含,可以作為參考

圖片來源於https://speakerdeck.com/jakevdp/pythons-visualization-landscape-pycon-2017

我在解決python交互式的可視化問題時,主要用到的是基於JavaScript的可視化庫pyecharts。pyecharts 是一個用於生成 Echarts 圖表的類庫。Echarts 是百度開源的一個數據可視化 JS 庫。用 Echarts 生成的圖可視化效果非常棒,pyecharts 是為了與 Python 進行對接,方便在 Python 中直接使用數據生成圖。使用pyecharts可以生成獨立的網頁,也可以在flask、django中集成使用 ,此外也可以直接利用render_notebook,直接在jupyter notebook裡調用渲染。

pyecharts的安裝

pyecharts 分為 v0.5.X 和 v1 兩個大版本,v0.5.X 和 v1 間不兼容,v1 是一個全新的版本。其中v0.5.X支持python2.7和3.4+,未來不再進行維護,v1僅支持python3.6+,是以後版本迭代的基礎。 安裝利用pip,利用conda安裝沒有成功

或源碼安裝

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

常用的圖表一個簡單的例子
from pyecharts.charts import Bar
bar = Bar()bar.add_xaxis(["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"])bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])bar.add_yaxis("商家B", [8, 15, 49, 15, 65, 80])bar.render('bar.html')

render 會生成本地 HTML 文件,默認會在當前目錄生成 render.html 文件嗎,也可以傳入路徑參數,如 bar.render("bar.html"),此外如果使用的是juypter notebook 可以直接reader_notebook在jupyter裡面渲染。打開html文件:

這是兩個商家不同衣服銷量對比的柱狀圖,可以查看數值的詳細信息,以及對不同的項目進行選擇。
接下來參考官方的示例,對常用的圖表進行簡單示範:

柱狀圖

柱狀圖可以進行對比分析,數據是對於不同地級市的觀測和預報數據,由於數據太多,單獨畫在一個圖片中,將會非常擁擠,無法清晰看出差距,就需要藉助於交互式的圖像方案:

from pyecharts import options as optsfrom pyecharts.charts import Bardef bar_test(df) -> Bar:    c = (        Bar()        .add_xaxis(df.index.tolist())        .add_yaxis("觀測", df['氣溫觀測'].tolist(),category_gap="10%", gap="5%")        .add_yaxis("預報", df['氣溫預測'].tolist(), category_gap="10%", gap="5%")        .set_global_opts(            title_opts=opts.TitleOpts(title="地級市氣溫觀測與預報分析"),            toolbox_opts=opts.ToolboxOpts(),            yaxis_opts=opts.AxisOpts(name="氣溫"),            xaxis_opts=opts.AxisOpts(name="城市"),            datazoom_opts=[opts.DataZoomOpts(),opts.DataZoomOpts(orient="vertical"), opts.DataZoomOpts(type_="inside")]        )       .set_series_opts(        label_opts=opts.LabelOpts(is_show=False),        markline_opts=opts.MarkLineOpts(            data=[                opts.MarkLineItem(type_="min", name="最小值"),                opts.MarkLineItem(type_="max", name="最大值"),                opts.MarkLineItem(type_="average", name="平均值"),            ]        ),        markpoint_opts=opts.MarkPointOpts(                data=[                    opts.MarkPointItem(type_="max", name="最大值"),                    opts.MarkPointItem(type_="min", name="最小值"),                    opts.MarkPointItem(type_="average", name="平均值"),                ]            )       )    )    return cc=bar_datazoom_slider_vertical(data)c.render_notebook()

選擇不同的數據

選擇不同的範圍

對於不同地級市觀測和預報的氣溫進行對比畫圖,在圖中我們可以選擇觀測或者預報數據,縮小x範圍,查看局部的差異,或者選定y軸範圍,查看不同溫度範圍的數值分布,右上角的工具可以提供圖像的放大和存儲以及原始數據的查看。

#堆疊柱狀圖def bar_datazoom_slider_vertical(df) -> Bar:    c = (        Bar()        .add_xaxis(df.index.tolist())        .add_yaxis("3月", df['3月份降水觀測'].tolist(),category_gap="10%", gap="5%", stack="stack1")        .add_yaxis("4月", df['4月份降水觀測'].tolist(), category_gap="10%", gap="5%", stack="stack1")        .add_yaxis("5月", df['5月份降水觀測'].tolist(), category_gap="10%", gap="5%", stack="stack1")        .set_global_opts(            title_opts=opts.TitleOpts(title="地級市降水春季分析"),            toolbox_opts=opts.ToolboxOpts(),            yaxis_opts=opts.AxisOpts(name="降水"),            xaxis_opts=opts.AxisOpts(name="城市"),            datazoom_opts=[opts.DataZoomOpts(),opts.DataZoomOpts(orient="vertical"), opts.DataZoomOpts(type_="inside")]        )       .set_series_opts(label_opts=opts.LabelOpts(is_show=False))    )    return cc=bar_datazoom_slider_vertical(data.iloc)c.render_notebook()

選擇不同的月份 

查看局部的數據

圖中是3,4,5三個月的降水累計分布圖,可以選擇不同的月份,查看局部的分布或者特定降水範圍的數據

箱式圖

箱式圖可以查看兩個數據的統計屬性是否一致,包括均值,最值,中值等

from pyecharts import options as optsfrom pyecharts.charts import Boxplot

def boxpolt_base() -> Boxplot: v1 = [ [850, 740, 900, 1070, 930, 850, 950, 980, 980, 880] + [1000, 980, 930, 650, 760, 810, 1000, 1000, 960, 960], [960, 940, 960, 940, 880, 800, 850, 880, 900] + [840, 830, 790, 810, 880, 880, 830, 800, 790, 760, 800], ] v2 = [ [890, 810, 810, 820, 800, 770, 760, 740, 750, 760] + [910, 920, 890, 860, 880, 720, 840, 850, 850, 780], [890, 840, 780, 810, 760, 810, 790, 810, 820, 850, 870] + [870, 810, 740, 810, 940, 950, 800, 810, 870], ] c = Boxplot() c.add_xaxis(["expr1", "expr2"]).add_yaxis("A", c.prepare_data(v1)).add_yaxis( "B", c.prepare_data(v2) ).set_global_opts(title_opts=opts.TitleOpts(title="BoxPlot-基本示例")) return cc=boxpolt_base()c.render_notebook()

從圖中可以清晰看到每個統計屬性

折線圖
from pyecharts import options as optsfrom pyecharts.charts import Linedef line_test(df) -> Line:    c = (        Line()        .add_xaxis(df.index.tolist())        .add_yaxis("觀測", df['氣溫觀測'].tolist(),linestyle_opts=opts.LineStyleOpts(color="k", width=2))        .add_yaxis("預報", df['氣溫預測'].tolist(),linestyle_opts=opts.LineStyleOpts(color="red", width=2))        .set_global_opts(            title_opts=opts.TitleOpts(title="地級市氣溫觀測與預報分析"),            toolbox_opts=opts.ToolboxOpts(),            yaxis_opts=opts.AxisOpts(name="氣溫"),            xaxis_opts=opts.AxisOpts(name="城市"),            datazoom_opts=[opts.DataZoomOpts(),opts.DataZoomOpts(orient="vertical"), opts.DataZoomOpts(type_="inside")]        )       .set_series_opts(        label_opts=opts.LabelOpts(is_show=False),        markline_opts=opts.MarkLineOpts(            data=[                opts.MarkLineItem(type_="min", name="最小值"),                opts.MarkLineItem(type_="max", name="最大值"),                opts.MarkLineItem(type_="average", name="平均值"),            ]        ),        markpoint_opts=opts.MarkPointOpts(                data=[                    opts.MarkPointItem(type_="max", name="最大值"),                    opts.MarkPointItem(type_="min", name="最小值"),                    opts.MarkPointItem(type_="average", name="平均值"),                ]            )       )    )    return cc=line_test(data)c.render_notebook()

滑動x軸查看局部信息

滑動y軸查看不同的取值範圍

圖中是不同地級市觀測與預報數據的折線圖,可以通過滑動x軸查看局部的趨勢和數值,設定y軸,查看特定溫度範圍的數據

散點圖

散點圖可以查看分布的趨勢

# 散點圖from pyecharts import options as optsfrom pyecharts.charts import Scatterdef scatter_visualmap_color(df) -> Scatter:    c = (        Scatter()        .add_xaxis(df.index.tolist())        .add_yaxis("觀測", df['降水觀測'].tolist())        .add_yaxis("預報", df['降水預測'].tolist())        .set_global_opts(            title_opts=opts.TitleOpts(title="Scatter-VisualMap(Size)"),            visualmap_opts=opts.VisualMapOpts(type_="size", max_=150, min_=20),        )    )    return cc=scatter_visualmap_color(data.iloc[::20])c.render_notebook()

大小可調節的散點圖

圖中是不同地級市,觀測與預報氣溫的散點圖,大小表示氣溫的高低,通過左方的調節bar,可以選擇一定範圍的氣溫,進行查看分布

熱力圖
import random
from example.commons import Fakerfrom pyecharts import options as optsfrom 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("series0", Faker.week, value) .set_global_opts( title_opts=opts.TitleOpts(title="HeatMap-基本示例"), visualmap_opts=opts.VisualMapOpts(), ) ) return cc=heatmap_base()c.render_notebook()

熱力圖

由於我的樣例數據沒有提供相關的信息,就借用官方的示例數據進行簡單展示,可以應用於數據缺失或頻率的一個展示

官方其他示例

地理區劃圖

地理線圖

3D展示

更多可以訪問https://pyecharts.org/#/zh-cn/geography_charts

相關焦點

  • python matplotlib畫圖教程學習:使用介紹
    本篇文章介紹matplotlib包使用時,需要掌握的一些基本概念。除了圖中顯示的紅藍線型圖和散點圖,matplotlib還能繪製柱形圖、燭型圖、餅圖、3D圖形等等各種個性化圖形,將在後續文章一一介紹。canvas對象一般不可見,通常無需直接操作該對象,matplotlib程序實際繪圖時需要調用該對象。Axes對象字面上理解,axes是數據軸axis的複數,但它並不是指數據軸,而是子圖對象。
  • 見識matplotlib:不常見的一面,折線圖!
    人們往往都更喜歡看圖說話,那麼用python的各位大俠們,大家都在用什麼畫圖呢?各種各樣的畫圖包猶如各式各樣的兵器,有的兵器功能單一但是在細分領域超級專業無敵,有的兵器功能多而全,用法靈活。眾所周知,matplotlib是python繪圖的基礎包,能夠生成各種各樣2D或者3D的圖形,用法算是多而全的那種,下邊是matplotlib官網首頁作為例子的幾張圖,大家感受一下:什麼?醜拒?不不不,別激動!其實matplotlib一直是一個低調奢華有內涵的包,需要我們透過它樸實無華的外表認清它豐富多彩的內在,來康康這條妖嬈的曲線,有沒有感受到它的召喚?
  • Matplotlib知識
    ,而是用各種例子快速直觀地讓讀者上手 Matplotlib 畫圖中的一些常用的、基礎的操作。本文亦可作常用畫圖函數/參數查詢之用。圖之好壞不在繁簡,一副好圖,應該讓讀者能清晰明了地理解你想要表達的意思。所以在設計圖的時候,此為第一要義。如果列印成黑白稿(grayscale)的話,讀者是否還能分辨出不同的元素?
  • matplotlib繪圖的核心原理講解
    作者:朱小五來自:凹凸數據(ID:alltodata)matplotlib是基於Python語言的開源項目,旨在為Python提供一個數據繪圖包。相信大家都用過它來數據可視化,之前我還分享過25個常用Matplotlib圖的Python代碼。
  • matplotlib中文顯示亂碼問題解決步驟
    」小夥伴們在使用matplotlib畫圖時,是否遇到過中文顯示亂碼的問題呢?本文介紹的方法可以完美解決Windows環境下亂碼問題。從網上下載黑體字文件SimHei.ttf,網上隨便找,多的很,隨便下載一個就可以。下載之後,雙擊文件安裝。
  • 記錄matplotlib庫報錯及解決方法
    csdn解決方法一:重裝matplotlib庫pip uninstall matplotlibpip install matplotlib但是操作之後仍是報同樣錯誤。csdn解決方法二:在導入matplotlib庫後,且在matplotlib.pyplot庫被導入前加「matplotlib.use(『agg』)」語句。
  • 漂亮,超詳細的matplotlib畫圖基礎
    >matplotlib 架構matplotlib 的主要任務之一,就是提供一套表示和操作圖形對象(主要對象)以及它的內部對象的函數和工具。有了這些附加功能,matplotlib 就能生成以鍵盤按鍵或滑鼠移動觸發的事件的交互式圖表。從邏輯上來講,matplotlib 的整體架構為3層,各層之間單向通信:Scripting (腳本)層。Artist (表現)層。Backend (後端)層。
  • python matplotlib模塊
    導入模塊導入matplotlib的子模塊import matplotlib.pyplot as pltimport numpy as np2.調用畫圖方法調用pyplot模塊的繪圖方法畫出圖像,基本的畫圖方法有:plot(將各個點連成曲線圖)、scatter(畫散點圖),bar(畫條形圖)還有更多方法。
  • matplotlib繪製數學函數
    本文作者:錢夢璇文字編輯:錢夢璇在以往的推文中,我們詳細介紹了pyecharts庫的畫圖方法,本篇採用的matplotlib
  • 數據可視化|matplotlib 的主要組成元素
    >matplotlib 是 Python 中的一個繪圖庫,具有可定製性強、圖表資源豐富等特點,既能創建靜態圖形,也能創建動態交互的數據可視化效果;既能創建 2D 圖形,也能創建 3D 圖形;既能創建常見的簡單圖形,也能創建統計學專業的複雜圖形。ma
  • Python數據可視化技能提升—用好matplotlib第1篇
    好啦,既然有朋友提出需要來啦,那今天咱們就聊點Python數據可視化相關的東東吧,說到Python的數據可視化呢,就必須提Python的一個庫哦,它就是大名鼎鼎的matplotlib庫,也是目前用得最多的Python數據可視化庫哦,matplotlib其實把MatLab的很多優點都借鑑了過來,所以呢,熟悉MatLab的朋友
  • 如何用matplotlib繪圖呢?
    什麼是matplotlib?使用過python做數據分析的小夥伴都知道,matplotlib是一款命令式、較底層、可定製性強、圖表資源豐富、簡單易用、出版質量級別的python 2D繪圖庫。matplotlib算是python繪圖的元老級庫,類似程式語言裡的C語言。很多其它的python繪圖庫是基於matplotlib開發的,比如seaborn、ggplot、plotnine、holoviews、basemap等。matplotlib可用於python腳本、python shell、jupyter notebook、web等。
  • 作圖神器Matplotlib文檔解讀
    在前幾天的詞雲圖的製作過程中,我們用到了matplotlib來繪圖。事實上,matplotlib是一個很強大的作圖工具,所以,今天通過幾個實例來介紹下matplotlib的用法。全文共6285字11圖,預計閱讀時間為36分鐘我們約定:代碼採用斜體加粗格式,重點部分顏色突出matplotlib是Python的一個平面繪圖包,儘管源頭起於MATLAB,但卻獨立於MATLAB,致力於用更少的代碼做出更漂亮的圖像在windows的搜索中輸入cmd,選擇進入cmd,鍵入以下代碼:
  • 手把手教你用Matplotlib進行數據可視化
    01 導入Matplotlib如果你安裝了完整的Python Anaconda,那麼你已經安裝了Matplotlib,可以開始了。否則,你可能要訪問官網獲取安裝說明。http://matplotlib.org就像我們用縮寫np來表示NumPy一樣,我們也會用一些標準的縮寫來表示Matplotlib導入:import matplotlib as mpl   import matplotlib.pyplot as plt plt是我們最常用的一個接口。
  • matplotlib庫繪製折線圖、子圖及條形圖
    前面幾節我們學習了python中numpy和pandas庫的一些常用操作,接下來幾個章節,我們學習一個非常重要的數據可視化庫matplotlib(seaborn庫也有有所涉及)。這裡我們需要知道,matplotlib庫主要繪製一些2D圖形和簡單的3D圖形。
  • Python 繪圖,我只用 Matplotlib(二)
    用於數學運算的庫,它是在安裝 matplotlib 時候順帶安裝的。pyplot 是 matplotlib 一個子模塊,主要為底層的面向對象的繪圖庫提供狀態機界面。狀態機隱式地自動創建數字和坐標軸以實現所需的繪圖。 matplotlib 中的所有內容都按照層次結果進行組織。頂層就是由 pyplot 提供的 matplotlib 「狀態機環境」。基於這個狀態機環境,我們就可以創建圖形。
  • Matplotlib數據可視化!
    相比傳統的用表格或文檔展現數據的方式,可視化能將數據以更加直觀的方式展現出來,使數據更加客觀、更具說服力。數據可視化已經被用於工作科研的方方面面,如工作報表、科研論文等,成為了不可或缺的基礎技能。現在,就讓我們一起來學習下數據可視化的基礎知識。
  • Matplotlib入門詳細教程
    那樣直接import matplotlib就行,而無需每次都import matplotlib.pyplot as plt了雖然pyplot是matplotlib下的子模塊,但二者的調用關係卻不是matplotlib調用pyplot,而是在pyplot中調用matplotlib,略顯本末倒置?當然,我等作為使用者、調包俠,自然是無法領會開發者的獨特考慮,也絕無資格對其評三道四,僅做吐槽一二。
  • Python可視化:matplotlib的坐標軸和rc參數設置指南!
    這是matplotlib繪製的y = x^2:這是本人親手繪製的y = x^2:(本靈魂畫手已上線,非戰鬥人員請撤離!不要太在意細節哈,忽視那個長的不太協調的x軸和彎彎曲曲如蚯蚓的拋物線,手殘黨表示真的盡力了,意會!意會哈!)正經的說,雖然都是y = x^2的圖像,是不是感覺兩幅圖差異還蠻大的。
  • 這麼用MatPlotLib視覺化呈現數據,你值得擁有!
    數據視覺化是數據科學領域的一項技術,可使你講出具有信服力的故事,通過易於理解、模擬化的方式將數據和分析結果視覺化呈現。這項技術能讓複雜的數據看起來很簡單,並易於理解。數據視覺化呈現工具以下介紹幾個常用的數據視覺化工具:1.