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

2020-12-06 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"');

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

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

相關焦點

  • matplotlib的Python數據可視化和探索——入門指南
    matplotlib——最受歡迎的Python庫,用於數據可視化和探索我喜歡在Python中使用matplotlib。這是我學會掌握的第一個可視化庫,此後一直存在。matplotlib是最受歡迎的用於數據可視化和探索的Python庫,這是有原因的——它提供的靈活性和敏捷性是無與倫比的!
  • Matplotlib庫繪製直方圖
    繪製直方圖直方圖由豎立在x軸上的多個相鄰的矩形組成,這些矩形把x軸拆分為一段段彼此不重疊的線段(線段兩個端點所標識的數據範圍也叫面元),矩形的面積跟落在其所對應的面元的元素數量成正比。這種可視化方法常被用於樣本分布等統計研究。pyplot用於繪製直方圖的函數為hist( ),該函數具有一個其他繪圖函數所沒有的功能。它除了繪製直方圖外,還以元組形式返回直方圖的計算結果。事實上,hist( )函數還可以實現直方圖的計算。
  • Python可視化很簡單,一文學會繪製柱狀圖、條形圖和直方圖
    matplotlib庫作為Python數據化可視化的最經典和最常用庫,掌握了它就相當於學會了Python的數據化可視化,通過前幾次呢,咱們已經討論了使用matplotlib庫中的圖表組成元素的幾個重要函數,相信大家已經學會並掌握了哦,今天呢,咱們再深入一點哦,一起來聊聊關於如何繪製柱狀圖
  • 數字黑洞:python-matplotlib來實現可視化
    1.2 數字黑洞與python-matplotlib可視化1.2.4 python-matplotlib可視化來看看效果:代碼============2.1 基礎代碼1:來自這篇文章https://blog.csdn.net/suoper/article/details/80896324?
  • 如何用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 是 Python 優秀的數據可視化第三方庫,matplotlib.pyplot 是繪製種類可視化圖形的命令子庫,相當於快捷方式 import matplotlib.pyplot as plt.
  • Python 繪圖庫 Matplotlib 入門教程
    >通過np.arange(100, 201)生成一個[100, 200]之間的整數數組,它的值是:[100, 101, 102, … , 200]通過matplotlib.pyplot將其繪製出來。關於樣式和顏色的說明請參見plot函數的API Doc:matplotlib.pyplot.plot散點圖scatter函數用來繪製散點圖。同樣,這個函數也需要兩組配對的數據指定x和y軸的坐標。
  • 50種常用的matplotlib可視化,再也不用擔心模型背著我亂跑了
    機器之心報導參與:思源數據分析與機器學習中常需要大量的可視化,因此才能直觀了解模型背地裡都幹了些什麼。而在可視化中,matplotlib 算得上是最常用的工具,不論是對數據有個預先的整體了解,還是可視化預測效果,matplotlib 都是不可缺失的模塊。
  • OpenCV-Python 直方圖-3:二維直方圖|二十八
    目標在本章中,我們將學習查找和繪製2D直方圖。這將在以後的章節中有所幫助。介紹在第一篇文章中,我們計算並繪製了一維直方圖。 之所以稱為一維,是因為我們僅考慮一個特徵,即像素的灰度強度值。 但是在二維直方圖中,您要考慮兩個特徵。
  • Python數據可視化技能提升—用好matplotlib第1篇
    好啦,既然有朋友提出需要來啦,那今天咱們就聊點Python數據可視化相關的東東吧,說到Python的數據可視化呢,就必須提Python的一個庫哦,它就是大名鼎鼎的matplotlib庫,也是目前用得最多的Python數據可視化庫哦,matplotlib其實把MatLab的很多優點都借鑑了過來,所以呢,熟悉MatLab的朋友,對於matplotlib是上手很快的哦!
  • 提高編程能力:Python數據可視化技能提升——好matplotlib第2篇
    上次已經和大家聊了Python數據可視化的經典庫:matplotlib,大家已經知道啦,matplotlib庫是Python中用於繪製二維、三維等這些圖表的數據可視化工具,並且已經和大家聊完了關於matplotlib庫的安裝啦、還有matplotlib庫的兩個函數,分別是plot()函數和scatter()函數哦,相信大家已經對於這兩個函數的用法掌握啦,在這就不多說了哈,如果還想繼續了解
  • Python 繪圖,我只用 Matplotlib
    圖1-1 散點圖示例使用Matplotlib的scatter()函數繪製散點圖,其中x和y是相同長度的數組序列。scatter()函數的一般用法為:主要參數說明如下:x,y:數組。s:散點圖中點的大小,可選。c:散點圖中點的顏色,可選。 marker:散點圖的形狀,可選。alpha:表示透明度,在 0~1 取值,可選。
  • Python數據可視化實例之繪製圖表
    Python數據可視化實例之繪製圖表原創 蟲蟲安全 2018-09-05 17:41:57得利於語言的簡單明了、豐富的數據結構、豐富的類和模塊,Python如今成了數據科學中的香餑餑,成了matlab、R語言之外又一強大的數據分析工具。拋開其他方面的、今天蟲蟲帶大家一起來探索Python在數據可視化方面的應用。
  • python matplotlib畫圖教程學習:使用介紹
    本篇文章介紹matplotlib包使用時,需要掌握的一些基本概念。除了圖中顯示的紅藍線型圖和散點圖,matplotlib還能繪製柱形圖、燭型圖、餅圖、3D圖形等等各種個性化圖形,將在後續文章一一介紹。matplotlib圖形的幾個主要對象:Figure對象整個圖形即是一個Figure對象。Figure對象至少包含一個子圖,也就是Axes對象。
  • 有這5小段代碼在手,輕鬆實現數據可視化(Python+Matplotlib)
    大數據文摘作品編譯:傅一洋、吳雙、龍牧雪本文要講的是Matplotlib,一個強大的Python可視化庫。一共5小段代碼,輕鬆實現散點圖、折線圖、直方圖、柱狀圖、箱線圖,每段代碼只有10行,也是再簡單不過了吧!數據可視化是數據科學家工作的一項主要任務。
  • OpenCV-Python 直方圖-1:查找、繪製和分析|二十六
    目標學會使用OpenCV和Numpy函數查找直方圖使用OpenCV和Matplotlib函數繪製直方圖你將看到以下函數:cv.calcHist(),np.histogram現在我們應該繪製直方圖,但是怎麼繪製?繪製直方圖有兩種方法,簡短的方法:使用Matplotlib繪圖功能稍長的方法:使用OpenCV繪圖功能1.
  • 從零開始學Python可視化(二):掌握統計圖形的繪製
    這次我們會嘗試更多常見的統計圖形,比如條形圖、直方圖、餅圖等,我們的目標是掌握工作學習過程中使用最頻繁的圖形技能。1. 柱狀圖(條形圖) —— bar() / barh()柱狀圖又叫條形圖,用於繪製定性(分類)數據的分布特徵,比如不同國家的GDP、不同年齡段的平均體重等。這次,我們以一組學生的身高來演示它的作圖方法。
  • 這麼用MatPlotLib視覺化呈現數據,你值得擁有!
    安裝Matplotlib1. 使用畫中畫python -m pip install -U pippython -m pip install -U matplotlib2.這些功能廣泛應用於折線圖、柱狀圖、直方圖、餅狀圖等。案例學習如上所述,可使用Matplotlib繪製多種圖形,如散點圖、柱狀圖和直方圖。根據數據視覺化過程中的實際需求選擇圖形類型,如群組對比、定量變量對比、數據分布分析等。
  • 未明學院:Python可視化庫Matplotlib繪圖入門詳解
    Matplotlib是Python的繪圖庫,其中的pyplot包封裝了很多畫圖的函數。Matplotlib.pyplot 包含一系列類似 MATLAB 中繪圖函數的相關函數。每個 Matplotlib.pyplot 中的函數會對當前的圖像進行一些修改,例如:產生新的圖像,在圖像中產生新的繪圖區域,在繪圖區域中畫線,給繪圖加上標記,等等…… Matplotlib.pyplot 會自動記住當前的圖像和繪圖區域,因此這些函數會直接作用在當前的圖像上。
  • python可視化(三)seaborn單變量分析繪圖(直方圖、條形圖)
    在前面兩篇文章中,我們已經學習了seaborn繪圖的風格和顏色設置,從本篇文章開始,我們開始選一些有意思的數據集進行各種圖形繪製,在實踐中感受數據可視化的魅力。本篇文章主要講2個繪圖函數,那就是繪製直方圖的函數seaborn,distplot()和繪製條形圖的函數seaborn.barplot()(關於直方圖和條形圖的區別請查閱前面matplotlib系列中的相關文章)。處理繪圖數據今天我們用直方圖和條形圖展示下NBA2017-2018賽季各球員薪資情況。