熱線電話:13121318867

登錄
首頁精彩閱讀python可視化:matplotlib繪制直方圖進階篇
python可視化:matplotlib繪制直方圖進階篇
2020-06-03
收藏

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

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

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

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

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢