python可視化:matplotlib繪製直方圖進階篇!

2020-12-09 CDA數據分析師

在上篇文章中介紹了直方圖的前五個參數,實際上直方圖一共有十幾個參數,剩下的參數利用這篇文章解釋清楚,讓大家能夠將如何繪製直方圖理解的透透的。

bottom參數

這個參數的含義也很直觀,底部的意思,指的是條形的底從哪裡開始。這個參數接收標量和序列,或者None,默認為None,如果是標量,則所有條形的底都從同一個數值處開始,如果為序列,則可以指定每個條形的底不一致。

fig = plt.figure(figsize=(16,4))pic1 = fig.add_subplot(131)plt.hist(data,bins = 10)plt.title("bottom默認None")pic2 = fig.add_subplot(132)plt.hist(data,bins = 10, bottom=10) # bottom=10,表示所有條形的底部從10開始,默認從0開始plt.title("bottom=10")pic3 = fig.add_subplot(133)plt.hist(data,bins = 10, bottom=np.array([21, 20, 13, 17, 22, 32, 23, 15, 22, 15])) # bottom為序列,序列長度於條形的數量一致,表示每個條的底部從哪裡開始plt.title("bottom取值為序列");

上圖是當bottom參數不同取值繪製出來不同的直方圖,第一幅圖和第二幅圖看起來長的一樣,但是仔細觀察下就能發現兩幅圖y軸的起始點不一樣的,第一幅圖的起點時0.第二幅圖的起點是10,因為bottom參數設置的為10;而第三幅圖bottom的參數設置的序列,序列的長度和直方圖的組數一致,即每個條形的起始點都不同,具體設置哪種比較好,還是要看具體的業務需求哦。

histtype參數

histtype參數控制的直方圖中條形的展現方式,它接收的參數是固定的字符串,其中常見的是以下兩種形式:

fig = plt.figure(figsize=(9,4))pic1 = fig.add_subplot(121)plt.hist(data,bins = 10, histtype = "bar")plt.title(' histtype = "bar"')pic2 = fig.add_subplot(122)plt.hist(data,bins = 10, histtype = "step") # histtype默認參數為」bar「,即條形,可以進行指定plt.title(' histtype = "step"');

如果需要將折線圖和直方圖繪製到一副圖中,可以考慮對條形的形式進行設置。

align參數

align參數控制的是條形的位置,能夠接收的參數也是指定的字符串,通常大家都用默認值"mid",即中間,這樣直方圖中的條形會居於前後臨界點的中間位置,是最常見的一種:

fig = plt.figure(figsize=(16,4))pic1 = fig.add_subplot(131)plt.hist(data,bins = 10, align = "left")plt.xticks([150. , 152.9, 155.8, 158.7, 161.6, 164.5, 167.4, 170.3, 173.2,176.1, 179. ],rotation = 30)plt.title("align ='left'")pic2 = fig.add_subplot(132)plt.hist(data,bins = 10, align = "right") plt.xticks([150. , 152.9, 155.8, 158.7, 161.6, 164.5, 167.4, 170.3, 173.2,176.1, 179. ],rotation = 30)plt.title("align ='right'")pic3 = fig.add_subplot(133)plt.hist(data,bins = 10, align = "mid")plt.xticks([150. , 152.9, 155.8, 158.7, 161.6, 164.5, 167.4, 170.3, 173.2,176.1, 179. ],rotation = 30)plt.title("align ='mid'");

由於原數據和分箱規則沒有變化,所以三個直方圖很相近,區別在於x軸上,這裡為了能直觀的看出區別,特意將每組的臨界值添加到了x軸,仔細查看能夠看出只有最後一個圖才是我們常見的直方圖,前兩個條形的位置都有偏移。

orientation參數

對條形圖比較熟悉的朋友可能對這個參數並不陌生,它是控制條形方向的參數,接收的是特定的字符,即條形的方向是垂直的還是水平的,一般默認繪製的都是垂直方向的,如果需要橫向的直方圖,直接設置這個參數就好。它接收的參數是指定的字符串,表明條形方向:

fig = plt.figure(figsize=(9,4))pic1 = fig.add_subplot(121)plt.hist(data,bins = 10) #默認條形方向為垂直方向plt.title('orientation默認"vertical"')pic2 = fig.add_subplot(122)plt.hist(data,bins = 10,orientation = 'horizontal') # orientation = 'horizontal'表示條形為水平方向plt.title('orientation = "horizontal"');

參數中可選的兩個字符即是垂直還是水平。

rwidth參數

從字面上看,這個參數是和寬度有關的,事實也的確是這樣。這個參數可以設置條形的寬度,接收數值,但是它設置的寬度是相對於默認寬度而言的,重新設置的寬度是原寬度的幾分之幾,我們具體看一下代碼:

fig = plt.figure(figsize=(9,4))pic1 = fig.add_subplot(121)plt.hist(data,bins = 10) #rwidth控制條形的相對寬度,不進行指定,自動計算plt.title('rwidth默認"None"')pic2 = fig.add_subplot(122)plt.hist(data,bins = 10,rwidth=0.8) # 指定條形的相對寬度plt.title('rwidth=0.8');

如果不進行設置,直方圖的各個條形之間是沒有空隙的,當我將rwidth設置成0.8之後,條形的寬度就只有原寬度的80%,條形之間也會出現縫隙。

log參數

log參數控制是否將刻度設置成對數刻度,接收布爾值,默認為False,進行普通刻度,一旦設置為True:

fig = plt.figure(figsize=(9,4))pic1 = fig.add_subplot(121)plt.hist(data,bins = 10)plt.title('log默認"False"')pic2 = fig.add_subplot(122)plt.hist(data,bins = 10,log=True) # 直方圖軸將設置為對數刻度。plt.title('log=True"');

設置成對數刻度後,雖然分組情況沒有變,但是分布狀況還是發生了變化,如果設置了該參數,最好在標題或其他部分標註提示一下。

color參數和X

這個參數可以說是相當熟悉,很多函數中都有,表示對圖形的顏色進行設置,沒錯的確是設置顏色,想起我們還有一個最開始的參數沒有講解,就在這裡和color一起講解了。

目前我們只有一組數據,現在呢假設有了兩個學校學生的身高數據,喏,這就是第二個學校的學生身高了:

data1 = np.random.randint(150,180,200)data1

輸出結果:

array([164, 171, 172, 161, 171, 175, 161, 170, 159, 163, 154, 162, 156, 158, 160, 156, 163, 167, 170, 168, 163, 171, 174, 161, 156, 167, 165, 169, 162, 176, 167, 157, 157, 169, 160, 177, 162, 154, 163, 168, 155, 177, 151, 155, 179, 166, 170, 168, 158, 167, 156, 170, 163, 157, 172, 169, 156, 171, 155, 160, 177, 164, 157, 160, 173, 175, 164, 168, 171, 158, 163, 162, 167, 167, 169, 155, 175, 171, 162, 174, 165, 179, 167, 179, 168, 157, 151, 151, 171, 170, 168, 165, 167, 179, 153, 177, 165, 155, 153, 157, 162, 167, 173, 161, 171, 159, 165, 152, 160, 172, 154, 157, 176, 152, 171, 161, 169, 154, 171, 150, 158, 164, 150, 170, 153, 162, 150, 174, 150, 176, 167, 171, 164, 170, 171, 163, 162, 164, 174, 157, 179, 166, 150, 170, 166, 161, 155, 175, 163, 156, 152, 159, 168, 158, 176, 159, 158, 169, 155, 166, 151, 163, 177, 154, 170, 152, 167, 172, 170, 163, 161, 177, 164, 160, 157, 167, 163, 177, 169, 162, 166, 158, 156, 168, 169, 168, 159, 159, 154, 169, 168, 169, 156, 165, 173, 175, 169, 156, 158, 154])

到這裡是不是有點明白了,直方圖不止可以對一組數據進行繪圖,多組數據也是可以的,參數x可以接收多組數據,如果是多組數據需要將多組數據打包到一起作為一個整體傳給參數x:

fig = plt.figure(figsize=(16,4))pic1 = fig.add_subplot(131)plt.hist(data,bins = 10)plt.title("color默認None")pic2 = fig.add_subplot(132)plt.hist(data,bins = 10, color="r") # 設置顏色為紅色plt.title("color="r"")pic3 = fig.add_subplot(133)plt.hist([data,data1],bins = 10, color=["c","orange"]) # color取值為序列,每個數據集對應一種顏色,color序列的長度與數據集個數一致plt.title("color取值為序列");

能夠看到,如果只有一組數據,color參數也就只接收一個顏色指定,如果是多組數據,可以對每個數據集的顏色進行指定,具體需要注意的點已經在代碼中備註了哦。

label參數

label參數也不是陌生的參數,是對標籤的設定,接收的是字符串,並沒有什麼特殊,但是需要注意的是如果設置了這個參數,記得調用plt.lenged()顯示圖例,如果不調用即使設置了標籤也不能作為圖例顯示在圖形中。而顯示圖例除了直接在直方圖函數中設置label參數外,還可以在plt.lenged()中設置,具體的區別還是看代碼吧:

fig = plt.figure(figsize=(11,4))pic1 = fig.add_subplot(121)plt.hist([data,data1],bins = 10, color=["c","orange"],label=["data","data1"]) plt.legend()plt.title('hist函數中設置label參數')pic2 = fig.add_subplot(122)plt.hist([data,data1],bins = 10, color=["c","orange"]) plt.legend(["data","data1"])plt.title('legend函數中設置label參數');

效果是一樣的。

stacked參數

這個參數的字面意思也很直觀,表示是否要堆疊,接收布爾值。需要注意的是如果繪圖只用了一個數據集,那麼這個參數無論設置成什麼都沒有影響,如果要堆疊至少需要兩個數據集才能顯示出區別:

fig = plt.figure(figsize=(9,4))pic1 = fig.add_subplot(121)plt.hist([data,data1],stacked=False) #默認多組數據並列排列plt.title('stacked默認"False"')pic2 = fig.add_subplot(122)plt.hist([data,data1],stacked=True) #多組數據彼此堆疊plt.title('stacked=True"');

區別是不是很明顯了,堆疊的意思也容易理解了對不對?

以上就是直方圖函數所有參數的設置講解,希望能夠幫助大家能夠全面的掌握如何繪製一個符合實際需求的直方圖。

相關焦點

  • Python中使用matplotlib繪製灰度直方圖
    灰度直方圖在數據統計分析、圖像處理中有著比較廣泛的應用,下面就介紹一下如何在Python中使用matplotlib來繪製灰度直方圖。
  • Python可視化:學會Matplotlib這幾點就夠了!
    python分析可視化展示,對於日常的分析中主要用到餅圖、折線圖、直方圖基本能滿足一般的分析可視化呈現。1、可視化直方圖舉例import matplotlib.pyplot as pltplt.rcParams['font.family']='Arial Unicode MS' #中文顯示plt.plot([3,1,4,5,2]) #基礎數據實現折線圖plt.ylabel('縱軸(值)')
  • Matplotlib庫繪製直方圖
    繪製直方圖直方圖由豎立在x軸上的多個相鄰的矩形組成,這些矩形把x軸拆分為一段段彼此不重疊的線段(線段兩個端點所標識的數據範圍也叫面元),矩形的面積跟落在其所對應的面元的元素數量成正比。這種可視化方法常被用於樣本分布等統計研究。pyplot用於繪製直方圖的函數為hist( ),該函數具有一個其他繪圖函數所沒有的功能。它除了繪製直方圖外,還以元組形式返回直方圖的計算結果。事實上,hist( )函數還可以實現直方圖的計算。
  • matplotlib的Python數據可視化和探索——入門指南
    matplotlib——最受歡迎的Python庫,用於數據可視化和探索我喜歡在Python中使用matplotlib。這是我學會掌握的第一個可視化庫,此後一直存在。matplotlib是最受歡迎的用於數據可視化和探索的Python庫,這是有原因的——它提供的靈活性和敏捷性是無與倫比的!
  • Python可視化很簡單,一文學會繪製柱狀圖、條形圖和直方圖
    matplotlib庫作為Python數據化可視化的最經典和最常用庫,掌握了它就相當於學會了Python的數據化可視化,通過前幾次呢,咱們已經討論了使用matplotlib庫中的圖表組成元素的幾個重要函數,相信大家已經學會並掌握了哦,今天呢,咱們再深入一點哦,一起來聊聊關於如何繪製柱狀圖
  • 高效使用 Python 可視化工具 Matplotlib
    基本前提如果你除了本文之外沒有任何基礎,建議用以下幾個步驟學習如何使用matplotlib:學習基本的matplotlib術語,尤其是什麼是圖和坐標軸始終使用面向對象的接口,從一開始就養成使用它的習慣用基礎的pandas繪圖開始你的可視化學習用seaborn進行更複雜的統計可視化用matplotlib來定製
  • 從零開始學Python【13】--matplotlib(直方圖)
    之所以我們很關心數據的分布,是因為在統計學中,很多假設條件都會包括正態分布,故使用直方圖來定性的判定數據的分布情況,尤其顯得重要。這期我們就來介紹Python中如何繪製一個直方圖。hist函數的參數解讀       繪圖之前,我們先來講解一下matplotlib包中hist函數的參數含義及使用方法:plt.hist(x, bins=10, range=None, normed=False,        weights=None, cumulative=False, bottom=None,        histtype='bar', align
  • Python Matplotlib入門學習(一)
    ,今天就帶大家通過matplotlib的官方文檔帶領大家學習如何進行基本繪圖。圖:matplotlib官網主頁Matplotlib:使用Python可視化「Matplotlib是一個綜合庫,用於在Python中創建靜態,動畫和交互式可視化。Matplotlib使簡單的事情變得容易而困難的事情變得可能。」這是他們的廣告語,不多說了我們進入正題。
  • matplotlib庫繪製折線圖、子圖及條形圖
    前面幾節我們學習了python中numpy和pandas庫的一些常用操作,接下來幾個章節,我們學習一個非常重要的數據可視化庫matplotlib(seaborn庫也有有所涉及)。這裡我們需要知道,matplotlib庫主要繪製一些2D圖形和簡單的3D圖形。
  • python:matplotlib入門詳細教程
    與之齊名,matplotlib作為數據科學的的另一必備庫,算得上是python可視化領域的元老,更是很多高級可視化庫的底層基礎,其重要性不言而喻。本篇對matplotlib進行系統性介紹,不會面面俱到,但求體系完備、詳略得當。
  • Python 數據分析:Matplotlib 繪圖
    簡介Matplotlib 是 Python 提供的一個繪圖庫,通過該庫我們可以很容易的繪製出折線圖、直方圖、散點圖、餅圖等豐富的統計圖,安裝使用 pip install matplotlib 命令即可,Matplotlib 經常會與 NumPy 一起使用。
  • python使用matplotlib畫動態圖
    matplotlib是python的核心繪圖庫,是python的一個開源項目,旨在為python提供一個繪圖庫。matplotlib與numpy組合是一種可行的matlab替代方案。在可視化中matplotlib是最常使用的工具,是對數據整體判斷、效果預測不可或缺的重要模塊。
  • Python-matplotlib 學術柱狀圖繪製
    黑灰顏色或者黑白陰影的柱狀圖或者條形圖,下面就具體介紹使用Python-matplotlib 的實現過程。matplotlib繪製這種柱狀圖或者條形圖還是比較簡單的,主要涉及的知識點就是ax.bar()方法的應用,首先進行黑灰顏色柱狀圖的繪製,具體代碼如下:plt.rcParams['font.family'] = ['Times New Roman']fig,ax = plt.subplots(1,1,figsize=(7,4.5),dpi=200
  • Python-matplotlib 學術型散點圖繪製
    本期推文只要介紹學術散點圖的繪製教程,涉及的內容主要還是matplotlib散點圖的繪製,只不過添加了相關性分析,擬合關係式和顏色映射散點密度(大多數的英文文章中多出現此類圖表
  • 看了這個總結,其實 Matplotlib 可視化,也沒那麼難!
    Matplotlib 可用於創建高質量的圖表和圖形,也可以用於繪製和可視化結果。matplotlib 是 Python 優秀的數據可視化第三方庫,matplotlib.pyplot 是繪製種類可視化圖形的命令子庫,相當於快捷方式 import matplotlib.pyplot as plt.
  • 用Python為直方圖繪製擬合曲線的兩種方法
    在python中一般採用matplotlib庫的hist來繪製直方圖,至於如何給直方圖添加擬合曲線(密度函數曲線),一般來說有以下兩種方法。方法一:採用matplotlib中的mlab模塊mlab模塊是Python中強大的3D作圖工具,立體感效果極佳。
  • Python-matplotlib: 散點圖的繪製
    ,所使用的數據關於全球教育水平劃分的師生比例,涉及到的包主要為matplotlib和seaborn,當然用於數據處理分析的pandas和 numpy也必不可少。本文的可視化繪製過程涉及seaborn的stripplot()方法,所需的庫、總體設置及用於繪製「抖動」的散點圖(類似ggplot2的position_jitter()),其目的就是為了防止散點重疊。
  • 第92天:Python Matplotlib 進階操作
    本章節主要是 Matplotlib 和 NumPy  實際操作案例講解,matplotlib 通常與 NumPy 一起使用,提供了一種有效的 MatLab 開源替代方案,除此之外,它還可以和其他圖形工具包搭配使用。
  • Python的數據可視化:對比7種工具包
    幸運的是,近幾年出現很多新的數據可視化Python庫彌補了這個差距,matplotlib已經成為主要的數據可視化庫,但是還有很多其它的庫,比如vispy,bokeh,seaborn,pygal,folium,和networkx,他們都建立在matplotlib的基礎之上,或者擁有matplotlib所不具有的功能。
  • python數據科學系列:matplotlib入門詳細教程
    與之齊名,matplotlib作為數據科學的的另一必備庫,算得上是python可視化領域的元老,更是很多高級可視化庫的底層基礎,其重要性不言而喻。本篇對matplotlib進行系統性介紹,不會面面俱到,但求體系完備、詳略得當。