在上篇文章中介紹了直方圖的前五個參數,實際上直方圖一共有十幾個參數,剩下的參數利用這篇文章解釋清楚,讓大家能夠將如何繪製直方圖理解的透透的。
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"');
區別是不是很明顯了,堆疊的意思也容易理解了對不對?
以上就是直方圖函數所有參數的設置講解,希望能夠幫助大家能夠全面的掌握如何繪製一個符合實際需求的直方圖。