50種常用的matplotlib可視化,再也不用擔心模型背著我亂跑了

2021-01-15 機器之心Pro

機器之心報導

參與:思源

數據分析與機器學習中常需要大量的可視化,因此才能直觀了解模型背地裡都幹了些什麼。而在可視化中,matplotlib 算得上是最常用的工具,不論是對數據有個預先的整體了解,還是可視化預測效果,matplotlib 都是不可缺失的模塊。最近 Machine Learning Plus 的作者介紹了 50 種最常用的 matplotlib 可視化圖表,而本文簡要介紹了這篇文章,詳細的 50 種可視化需要查閱原文。

50 種可視化圖原地址:https://www.machinelearningplus.com/plots/top-50-matplotlib-visualizations-the-master-plots-python

介紹

該表格主要介紹了 7 種不同的 matplotlib 可視化類別,讀者可根據目的選擇不同的圖。例如,如果你想要繪製兩個變量之間的關係,查看下面 Correlation 部分;或者如果你想展示某個變量的動態變化,查看下面的 Change 部分。

一個美麗的圖表應該:

提供準確、有需求的信息,不歪曲事實;設計簡單,獲取時不會太費力;美感是為了支持這些信息,而不是為了掩蓋這些信息;不要提供太過豐富的信息與太過複雜的結構。

如下所示為 7 種不同類型的可視化圖表:協相關性主要描述的是不同變量之間的相互關係;偏差主要展現出不同變量之間的差別;排序主要是一些有序的條形圖、散點圖或斜線圖等;分布就是繪製概率與統計中的分布圖,包括離散型的直方圖和連續型的概率密度分布圖等。後面還有變量的時序變化圖和類別圖等常見的可視化製圖類別。

配置

在繪製這 50 種可視化圖之前,我們需要配置一下依賴項以及通用設定,當然後面有一些獨立的美圖會修改通用設定。如果讀者看中了某種可視化圖,那麼用這些配置再加上對應的可視化代碼就能嵌入到我們自己的項目中。

如下所示 pandas 與 numpy 主要用於讀取和處理數據,matplotlib 與 seaborn 主要用於可視化數據。其中 seaborn 其實是 matplotlib 上的一個高級 API 封裝,在大多數情況下使用 seaborn 就能做出很有吸引力的圖,而使用 matplotlib 能製作更具特色的圖。

# !pip install brewer2mplimport numpy as npimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as pltimport seaborn as snsimport warnings; warnings.filterwarnings(action='once')large = 22; med = 16; small = 12params = {'axes.titlesize': large,'legend.fontsize': med,'figure.figsize': (16, 10),'axes.labelsize': med,'axes.titlesize': med,'xtick.labelsize': med,'ytick.labelsize': med,'figure.titlesize': large}plt.rcParams.update(params)plt.style.use('seaborn-whitegrid')sns.set_style("white")%matplotlib inline# Versionprint(mpl.__version__) #> 3.0.0print(sns.__version__) #> 0.9.0

製圖示意

前面列出了 7 大類共 50 種不同的可視化圖,但我們無法一一介紹,因此我們從協相關性、偏差、分布、時序變化和群組圖中各選擇了一個示例,它們能展示不同數據在不同情況下的可視化需求。

相關圖(Correllogram)

若有兩種變量,且它們的值為離散的,那麼二維相關圖可以表示兩個變量所有可能組合之間的相關性。當然如果是單變量,那麼自身所有可能的組合也可以組成一個相關圖:

# Import Datasetdf = pd.read_csv("https://github.com/selva86/datasets/raw/master/mtcars.csv")# Plotplt.figure(figsize=(12,10), dpi= 80)sns.heatmap(df.corr(), xticklabels=df.corr().columns, yticklabels=df.corr().columns, cmap='RdYlGn', center=0, annot=True)# Decorationsplt.title('Correlogram of mtcars', fontsize=22)plt.xticks(fontsize=12)plt.yticks(fontsize=12)plt.show()

面積圖(Area Chart)

通過使用不同的顏色表示水平軸和線之間的區域,面積圖不僅強調峰值和低谷值,同時還強調它們持續的時間:即峰值持續時間越長,面積越大。

import numpy as npimport pandas as pd# Prepare Datadf = pd.read_csv("https://github.com/selva86/datasets/raw/master/economics.csv", parse_dates=['date']).head(100)x = np.arange(df.shape[0])y_returns = (df.psavert.diff().fillna(0)/df.psavert.shift(1)).fillna(0) * 100# Plotplt.figure(figsize=(16,10), dpi= 80)plt.fill_between(x[1:], y_returns[1:], 0, where=y_returns[1:] >= 0, facecolor='green', interpolate=True, alpha=0.7)plt.fill_between(x[1:], y_returns[1:], 0, where=y_returns[1:] <= 0, facecolor='red', interpolate=True, alpha=0.7)# Annotateplt.annotate('Peak \n1975', xy=(94.0, 21.0), xytext=(88.0, 28), bbox=dict(boxstyle='square', fc='firebrick'), arrowprops=dict(facecolor='steelblue', shrink=0.05), fontsize=15, color='white')# Decorationsxtickvals = [str(m)[:3].upper()+"-"+str(y) for y,m in zip(df.date.dt.year, df.date.dt.month_name())]plt.gca().set_xticks(x[::6])plt.gca().set_xticklabels(xtickvals[::6], rotation=90, fontdict={'horizontalalignment': 'center', 'verticalalignment': 'center_baseline'})plt.ylim(-35,35)plt.xlim(1,100)plt.title("Month Economics Return %", fontsize=22)plt.ylabel('Monthly returns %')plt.grid(alpha=0.5)plt.show()

密度圖(Density Plot)

在概率論與統計學習方法中,可視化概率密度就變得非常重要了。這種密度圖正是可視化連續型隨機變量分布的利器,分布曲線上的每一個點都是概率密度,分布曲線下的每一段面積都是特定情況的概率。如下所示,通過將它們按「response」變量分組,我們可以了解 X 軸和 Y 軸之間的關係。

# Import Datadf = pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")# Draw Plotplt.figure(figsize=(16,10), dpi= 80)sns.kdeplot(df.loc[df['cyl'] == 4, "cty"], shade=True, color="g", label="Cyl=4", alpha=.7)sns.kdeplot(df.loc[df['cyl'] == 5, "cty"], shade=True, color="deeppink", label="Cyl=5", alpha=.7)sns.kdeplot(df.loc[df['cyl'] == 6, "cty"], shade=True, color="dodgerblue", label="Cyl=6", alpha=.7)sns.kdeplot(df.loc[df['cyl'] == 8, "cty"], shade=True, color="orange", label="Cyl=8", alpha=.7)# Decorationplt.title('Density Plot of City Mileage by n_Cylinders', fontsize=22)plt.legend()plt.show()

此外值得注意的是,深度學習,尤其是深度生成模型中的分布極其複雜,它們是不能直接可視化的,我們一般會通過 T-SNE 等降維方法可視化。

時序變化圖(Time Series Plot)

時序變化圖也是機器學習中最常見的一種可視化圖表,不論是可視化損失函數還是準確率,都需要這種時序變化圖的幫助。這種圖主要關注某個變量怎樣隨時間變化而變化,以下展示了從 1949 到 1969 航空客運量的變化:

# Import Datadf = pd.read_csv('https://github.com/selva86/datasets/raw/master/AirPassengers.csv')# Draw Plotplt.figure(figsize=(16,10), dpi= 80)plt.plot('date', 'traffic', data=df, color='tab:red')# Decorationplt.ylim(50, 750)xtick_location = df.index.tolist()[::12]xtick_labels = [x[-4:] for x in df.date.tolist()[::12]]plt.xticks(ticks=xtick_location, labels=xtick_labels, rotation=0, fontsize=12, horizontalalignment='center', alpha=.7)plt.yticks(fontsize=12, alpha=.7)plt.title("Air Passengers Traffic (1949 - 1969)", fontsize=22)plt.grid(axis='both', alpha=.3)# Remove bordersplt.gca().spines["top"].set_alpha(0.0) plt.gca().spines["bottom"].set_alpha(0.3)plt.gca().spines["right"].set_alpha(0.0) plt.gca().spines["left"].set_alpha(0.3) plt.show()

樹狀圖(Dendrogram)

樹狀圖是另一個比較有用的圖表,層次聚類或決策樹等算法可以使用它完成優美的可視化。樹形圖是以樹的圖形表示數據或模型結構,以父層和子層的結構來組織對象,是枚舉法的一種表達方式。下圖展示了一種神似層次聚類算法的圖表:

import scipy.cluster.hierarchy as shc# Import Datadf = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/USArrests.csv')# Plotplt.figure(figsize=(16, 10), dpi= 80) plt.title("USArrests Dendograms", fontsize=22) dend = shc.dendrogram(shc.linkage(df[['Murder', 'Assault', 'UrbanPop', 'Rape']], method='ward'), labels=df.State.values, color_threshold=100) plt.xticks(fontsize=12)plt.show()

本文為機器之心報導,轉載請聯繫本公眾號獲得授權。

相關焦點

  • matplotlib的Python數據可視化和探索——入門指南
    matplotlib——最受歡迎的Python庫,用於數據可視化和探索我喜歡在Python中使用matplotlib。這是我學會掌握的第一個可視化庫,此後一直存在。matplotlib是最受歡迎的用於數據可視化和探索的Python庫,這是有原因的——它提供的靈活性和敏捷性是無與倫比的!
  • 手把手教你用Matplotlib進行數據可視化
    http://matplotlib.org就像我們用縮寫np來表示NumPy一樣,我們也會用一些標準的縮寫來表示Matplotlib導入:import matplotlib as mpl   import matplotlib.pyplot as plt plt是我們最常用的一個接口。
  • 數字黑洞:python-matplotlib來實現可視化
    1.2 數字黑洞與python-matplotlib可視化1.2.4 python-matplotlib可視化來看看效果:pic5:輸入n為個位數1~6的情況2 matplotlib可視化代碼2:#導入模塊可視化用import matplotlib.pyplot as plt#定一個空列表,存放數值num_data=[]#數字黑洞函數def black(number): if number>1: if number%2==0: number=number/2 else:
  • 提高編程能力:Python數據可視化技能提升——好matplotlib第2篇
    上次已經和大家聊了Python數據可視化的經典庫:matplotlib,大家已經知道啦,matplotlib庫是Python中用於繪製二維、三維等這些圖表的數據可視化工具,並且已經和大家聊完了關於matplotlib庫的安裝啦、還有matplotlib庫的兩個函數,分別是plot()函數和scatter()函數哦,相信大家已經對於這兩個函數的用法掌握啦,在這就不多說了哈,如果還想繼續了解
  • Python數據可視化技能提升—用好matplotlib第1篇
    好啦,既然有朋友提出需要來啦,那今天咱們就聊點Python數據可視化相關的東東吧,說到Python的數據可視化呢,就必須提Python的一個庫哦,它就是大名鼎鼎的matplotlib庫,也是目前用得最多的Python數據可視化庫哦,matplotlib其實把MatLab的很多優點都借鑑了過來,所以呢,熟悉MatLab的朋友,對於matplotlib是上手很快的哦!
  • 看了這個總結,其實 Matplotlib 可視化,也沒那麼難!
    作者 | 舊時晚風拂曉城 來源 | 傑哥的IT之旅(ID:Jake_Internet)頭圖 | CSDN 下載自東方IC公眾號「傑哥的IT之旅」後臺回覆:「matplotlib數據可視化」,獲取本文完整數據集。Python 中可以通過 matplotlib 模塊的 pyplot 子庫來完成繪圖。
  • 30分鐘入門 Matplotlib 繪圖
    pip install matplotlib如果安裝失敗,可以使用國內的鏡像來安裝Matplotlib庫,如下所示。繪製身高-體重的散點圖import matplotlib.pyplot as pltheight=[161,170,182,175,173,165]weight=[50,58,80,70,69,55
  • matplotlib繪圖的核心原理講解
    作者:朱小五來自:凹凸數據(ID:alltodata)matplotlib是基於Python語言的開源項目,旨在為Python提供一個數據繪圖包。相信大家都用過它來數據可視化,之前我還分享過25個常用Matplotlib圖的Python代碼。可是你了解過它繪圖的核心原理嗎?
  • 使用Matplotlib可視化數據的5個強大技巧
    數據可視化用於以更直接的表示方式顯示數據,並且更易於理解。它可以用柱狀圖、散點圖、折線圖、餅圖等形式形成。許多人仍然使用Matplotlib作為後端模塊來可視化他們的圖形。在這個故事中,我將給你一些技巧,使用Matplotlib創建一個優秀圖表的5個強大技巧。1.
  • Matplotlib繪圖|快速定義圖表樣式的小技巧
    (X,S,color = "blue",linewidth = 3.0,linestyle = ":")為了方便起見,matplotlib 提供一個 matplotlibrc 文件接口,來全局自定義圖表屬性(圖表大小、DPI、線的寬度、坐標軸、樣式、網格屬性等),使用方法為 rcParams 命令,一次定義,對接下來創建的全部圖表的樣式都起效,避免了來回調參的麻煩rcParsms
  • Python 繪圖,我只用 Matplotlib
    圖1-1 散點圖示例使用Matplotlib的scatter()函數繪製散點圖,其中x和y是相同長度的數組序列。scatter()函數的一般用法為:主要參數說明如下:x,y:數組。s:散點圖中點的大小,可選。c:散點圖中點的顏色,可選。 marker:散點圖的形狀,可選。alpha:表示透明度,在 0~1 取值,可選。
  • 這麼用MatPlotLib視覺化呈現數據,你值得擁有!
    而這完全適用於數據科學,因為其需要分析大量視覺化呈現的數據以推演數據模型。數據視覺化是數據科學領域的一項技術,可使你講出具有信服力的故事,通過易於理解、模擬化的方式將數據和分析結果視覺化呈現。這項技術能讓複雜的數據看起來很簡單,並易於理解。數據視覺化呈現工具以下介紹幾個常用的數據視覺化工具:1. Matplotlib2.
  • 使用Matplotlib繪製堆積條形圖
    就像任何可視化一樣,條形圖也有一些缺點,例如它們的可伸縮性較差。條形圖太多會使人感到難以閱讀,尤其是在當我們處理層次化的類別,也就是當我們有需要可視化的組和子組時,這個問題更常見。在這種情況下,堆積條形圖是一個很好的選擇,它讓我們能更好地比較和分析數據。在本文中,我們將探討如何使用Python的Matplotlib構建這些可視化圖形。
  • PyCharm安裝matplotlib教程——安裝好matplotlib但是import報錯
    方式一:通過cmd方式安裝進入Python的安裝目錄下,我的是在D:\Python。輸入python -m pip install -U pip setuptools2.輸入python -m pip install matplotlib3.檢查是否已經安裝成功。輸入python -m pip list成功安裝。
  • 見識matplotlib:不常見的一面,折線圖!
    眾所周知,matplotlib是python繪圖的基礎包,能夠生成各種各樣2D或者3D的圖形,用法算是多而全的那種,下邊是matplotlib官網首頁作為例子的幾張圖,大家感受一下:什麼?醜拒?不不不,別激動!其實matplotlib一直是一個低調奢華有內涵的包,需要我們透過它樸實無華的外表認清它豐富多彩的內在,來康康這條妖嬈的曲線,有沒有感受到它的召喚?
  • matplotlib中文顯示之圖表大全
    全局支持中文顯示以及指定局部中文顯示https://aistudio.baidu.com/aistudio/projectdetail/390895使用中還有問題可以在論壇中提出(你的問題可能大家已經討論過了)https://ai.baidu.com/forum/topic/show/958873考慮到部分同學對matplotlib本身不是太熟悉
  • Python可視化:matplotlib的坐標軸和rc參數設置指南!
    當我看到這樣一副圖的時候,心裡有點點疑問,貌似和手繪的圖有點不一樣啊,到底哪裡不一樣呢,來個對比看一下。這是matplotlib繪製的y = x^2:這是本人親手繪製的y = x^2:(本靈魂畫手已上線,非戰鬥人員請撤離!不要太在意細節哈,忽視那個長的不太協調的x軸和彎彎曲曲如蚯蚓的拋物線,手殘黨表示真的盡力了,意會!意會哈!)
  • python matplotlib畫圖教程學習:使用介紹
    本篇文章介紹matplotlib包使用時,需要掌握的一些基本概念。下圖顯示了matplotlib圖形的基本構成部分,如figure(圖形)、axes(子圖形)、title(標題)、legend(圖例)、Major tick(大標尺刻度)、Minor tick(小標尺刻度)、Major tick label(大標尺刻度數值)、Minor tick label(小標尺刻度數值)、Y axis label(y軸指標說明)、X axis label(x軸指標說明)、Line
  • Python 繪圖庫 Matplotlib 入門教程
    筆者推薦大家通過pip的方式進行安裝,具體方法如下:sudo pip3 install matplotlib本文的代碼在如下環境中測試:Apple OS X 10.13Python 3.6.3matplotlib 2.1.1
  • 如何用matplotlib繪圖呢?
    什麼是matplotlib?使用過python做數據分析的小夥伴都知道,matplotlib是一款命令式、較底層、可定製性強、圖表資源豐富、簡單易用、出版質量級別的python 2D繪圖庫。matplotlib算是python繪圖的元老級庫,類似程式語言裡的C語言。很多其它的python繪圖庫是基於matplotlib開發的,比如seaborn、ggplot、plotnine、holoviews、basemap等。matplotlib可用於python腳本、python shell、jupyter notebook、web等。