第二十三篇,數據分析之數據可視化之統計圖

模塊別忘了導入

import matplotlib.pylab as plt
import numpy as np
import pandas as pd

柱形圖

通過一個案例來了解柱形圖:

a = [1,2,3,4,5]
b = [2,4,6,8,10]
plt.bar(left=a,height=b)
plt.show()

運行結果:

    plt.bar(left=a,height=b)
TypeError: bar() missing 1 required positional argument: 'x'

哦吼咋報錯了,讓我們看看報錯的信息,好像是缺少一個x參數,在看看幫助文檔:

bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

這個應該是版本的變更導致的,所以這個裏面應該傳一個x與height的位置參數,width爲柱子的寬度默認是(0.8),bottom爲柱子底部與x軸的距離默認爲None:

a = [1,2,3,4,5]
b = [2,4,6,8,10]
plt.bar(x=a,height=b)
plt.show()

在這裏插入圖片描述這裏的話可以根據以上代碼來進行分析,x的話傳遞的參數就是x軸的名稱,height就是y軸的名稱,寬度默認0.8
修改一下里面的參數看看:

a = [1,2,3,4,5]
b = [2,4,6,8,10]
plt.bar(x=a,height=b,width=0.5,bottom=[1,2,3,4,5])
plt.show()

在這裏插入圖片描述那有沒有啥辦法能換個好看的柱子,當然有:

a = [1,2,3,4,5]
b = [2,4,6,8,10]
plt.bar(x=a,height=b,width=0.5,bottom=[1,2,3,4,5],color='black',edgecolor='r',linestyle='--',linewidth=3,hatch='x')
plt.show()

在這裏插入圖片描述好醜啊,自己沒做好,讀者可以自己試着做一下,然後裏面的那些參數都可以查看幫助文檔,比如color就是柱子的顏色可以使用純色的縮寫:r,b,y或者英文等,edgecolor表示柱子邊緣的顏色,linestyle表示柱子邊線的線型,hatch表示填充柱子內部的圖形等。
當然這個只是基操,且看下面代碼:

a = range(1,6)
b = np.random.random(5)
c = np.random.random(5)
plt.bar(a,b,label='b',color='b')
plt.bar(a,c,bottom=b,label='c',color='y')

運行結果:
在這裏插入圖片描述這種就叫堆積圖,通過獲取隨機數來進行堆積,如果第二個不用bottom的話就會導致重合後面那個顏色會覆蓋在之前那個顏色上面,可以自行嘗試一下。
還有種簇狀柱形圖:

a = np.arange(1,6)
b = np.random.random(5)
c = np.random.random(5)
width = 0.4
a = a - 0.2
plt.bar(a,b,width=width,label='b',color='b')
plt.bar(a+width,c,width=width,label='c',color='y')
plt.legend()

在這裏插入圖片描述上述代碼分析一下,因爲默認是0.8寬度,既然我們要讓它們每根柱子爲0.4的寬度,a這個柱子再減0.2的距離,這樣它就佔據左邊0.4的位置,而b這個柱子就要加上0.4的距離,a+width的意思是因爲它們柱子之間距離爲0,所以要給它們一箇中心線的位置,比如就會覆蓋掉,plt.legend意思就不多講,圖列嘛,這裏不懂可以參考以前的博客。

條形圖

豎着的叫柱狀圖,那橫着的就是條形圖了。

a = np.arange(1,6)
b = np.random.random(5)
plt.barh(a,b)
plt.show()

在這裏插入圖片描述觀察上面代碼可以看出來,繪製條形圖使用的函數是barh(),通過單詞可以看出來,條線圖是通過柱形圖轉爲水平而來的,所以,裏的參數也就隨之順時針轉90°了,裏面的使用方法與與plt.bar()方法類似,可以自己嘗試一下。
下面有一種正負條形圖,可以用來比較對象:

a = np.arange(1,6)
b = np.random.random(5)
c = np.random.random(5)
plt.barh(a,b,color='b')
plt.barh(a,-c,color='y')

在這裏插入圖片描述通過顏色的分佈就不難理解代碼的意思,黃色的這個條線圖是-c了的,所以是負的,仔細領會。

箱形圖

“盒式圖"或叫"盒須圖”"箱形圖"boxplot(也稱箱須圖(Box-whiskerPlot)須圖又稱爲箱形圖,其繪製須使用常用的統計量,能提供有關數據位置和分散情況的關鍵信息,尤其在比較不同的母體數據時更可表現其差異。
主要包含六個數據節點,將一組數據從大到小排列,分別計算出他的上邊緣,上四分位數Q3,中位數,下四分位數Q1,下邊緣,還有一個異常值。
在這裏插入圖片描述
上圖觀察可以得到
最小值(minimum)=5
下四分位數(Q1)=7
中位數(Med–也就是Q2)=8.5
上四分位數(Q3)=9
最大值(maximum)=10
平均值=8
四分位間距(interquartile range)={\displaystyle Q3-Q1}=2 (即ΔQ)

下面通過一個案例來了解:

fig,ax = plt.subplots(1,2)
data = [1,6,2,8,3]
ax[0].boxplot([data])
ax[0].grid(True)
ax[1].boxplot([data],showmeans=True)
ax[1].grid(True)

在這裏插入圖片描述先看看第一個箱型圖,最小值爲1,最大值爲8,因爲data裏面是一個列表按順序來的話3是中位數,所以圖上就用橙色標記出來了,然後其他幾個數都分別在畫布上標記出來了,2表示的是下四分位數,6表示的是上四分位數,然後第二個箱型圖裏面就比第一個箱線圖多了一個showmeans=True參數可以將平均值顯示出來。上面使用Axes對象的boxplot()方法繪製箱線圖,那我們使用plt.boxplot()繪製:

a = [1,6,2,8,3]
plt.boxplot(a)
plt.grid(True)
plt.show()

也可以查看plt.boxplot的幫助文檔:

boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_ticks=True, autorange=False, zorder=None, *, data=None)

在這裏插入圖片描述當然pandas的數據對象也有boxplot()方法(模塊別忘了導入):

np.random.seed(12345)
data = pd.DataFrame(np.random.rand(5,4),columns=['A','B','C','D'])
bp = data.boxplot(sym='r*',vert=False,meanline=False,showmeans=True)
plt.show()    

在這裏插入圖片描述分析一下pd.boxplot裏面的參數,其中起到作用的是vert=False,如果等於True,則表示豎直方向(默認就是豎直方向),sym=‘r*’,表示異常點的形狀,meanline=False,表示平均值的形狀不能爲線性,因爲中位數常常用於線段表示,這樣做可以避免兩者被混淆。

餅圖

餅圖顯示一個數據系列中各項的大小與各項總和的比例。
在Matplotlib中使用是的pie()方法繪製餅圖,可以查看幫助文檔:

pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, data=None)

通過一個案例瞭解一下餅圖:

a = [1,2,3,4]
fig,ax = plt.subplots()
labels = ['A','B','C','D']
colors = ['r','b','y','g']
explode = (0,0,0,0.1)
ax.pie(a,labels=labels,colors=colors,explode=explode,autopct='%1.1f%%',shadow=True,startangle=90,radius=1.2)
ax.set(aspect='equal',title='Pie')

在這裏插入圖片描述
先運行一下,通過上面運行的結果來分析一下plt.pie參數:
a,表示數據源,就是一個列表
labels,設置每個扇面的標示
colors,老員工了,當然是扇面顏色了
explode,標識每個扇面之間的偏距,上面參數裏面有個0.1表示跟第四個扇面的距離,0就是表示沒有距離
autopct, 按照規定的格式顯示每個扇面的百分比
shadow, True表示沒有陰影,False表示有陰影
startangel, 表示從第一個扇形是從90°開始,默認是逆時針旋轉
radius,表示半徑大小,上面表示1.2

熟能生巧,多試試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章