matplotlib 均值_matplotlib可视化箱线图
前言針對離散變量我們可以使用常見的條形圖和餅圖完成數據的可視化工作,那么,針對數值型變量,我們也有很多可視化的方法,例如箱線圖、直方圖、折線圖、面積圖、散點圖等等。先來數值型變量的箱線圖繪制。箱線圖一般用來展現數據的分布(如上下四分位值、中位數等),同時,也可以用箱線圖來反映數據的異常情況。
boxplot函數的參數解讀
繪圖之前,我們先來講解一下matplotlib包中boxplot函數的參數含義及使用方法:
plt.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=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)x:指定要繪制箱線圖的數據;
notch:是否是凹口的形式展現箱線圖,默認非凹口;
sym:指定異常點的形狀,默認為+號顯示;
vert:是否需要將箱線圖垂直擺放,默認垂直擺放;
whis:指定上下須與上下四分位的距離,默認為1.5倍的四分位差;
positions:指定箱線圖的位置,默認為[0,1,2…];
widths:指定箱線圖的寬度,默認為0.5;
patch_artist:是否填充箱體的顏色;
meanline:是否用線的形式表示均值,默認用點來表示;
showmeans:是否顯示均值,默認不顯示;
showcaps:是否顯示箱線圖頂端和末端的兩條線,默認顯示;
showbox:是否顯示箱線圖的箱體,默認顯示;
showfliers:是否顯示異常值,默認顯示;
boxprops:設置箱體的屬性,如邊框色,填充色等;
labels:為箱線圖添加標簽,類似于圖例的作用;
filerprops:設置異常值的屬性,如異常點的形狀、大小、填充色等;
medianprops:設置中位數的屬性,如線的類型、粗細等;
meanprops:設置均值的屬性,如點的大小、顏色等;
capprops:設置箱線圖頂端和末端線條的屬性,如顏色、粗細等;
whiskerprops:設置須的屬性,如顏色、粗細、線的類型等;
生成隨機數
在這里我們利用 numpy 庫生成三組正態分布隨機數:
import matplotlib.pyplot as plt
import numpy as np
all_data=[np.random.normal(0,std,100) for std in range(1,4)]
figure,axes=plt.subplots() #得到畫板、軸
axes.boxplot(all_data,patch_artist=True) #描點上色
plt.show() #展示
plt.subplots 顧名思義是子圖集合,當不指定 plt.subplots() 的 nrows 和 ncols 參數值時,默認只生成一張圖。
Note:默認 patch_artist=False,所以我們需要指定其參數值為 True,即可自動填充顏色。
多圖輸出有時我們會有把多張圖放在同一行輸出的對比需求,這時只需指定 plt.subplots() 函數的 nrows,ncols 參數值,舉個例子,我想生成一個 2x3 的面板,即每一行放三張圖,只需設定 nrows=2,ncols=3。
當然,你還可以通過參數 figsize 指定圖形大小。
import matplotlib.pyplot as plt
import numpy as np
all_data=[np.random.normal(0,std,100) for std in range(1,4)]
#首先有圖(fig),然后有軸(ax)
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(9,4))
bplot1=axes[0].boxplot(all_data,
vert=True,
patch_artist=True)
#axes[0]表示在第一張圖的軸上描點畫圖
#vert=True表示boxplot圖是豎著放的
#patch_artist=True 表示填充顏色
bplot2 = axes[1].boxplot(all_data,
notch=True, # 切口形狀
vert=True,
patch_artist=True)
plt.show()
# 第一張圖是矩形箱線圖
# 第二張圖是 notch 形狀的箱線圖
# 顯然,把兩張圖放在同一行輸出非常有利于對比觀察圖形差異。
1.1.4 美化圖形
基本圖形畫得差不多了,接下來就只需要讓它美化一下!
我們先來查看一下我們之前作出的箱線圖對象的類型:type(bplot1)
#dict
返回字典字典類型顏色填充 顏值即正義!要選個好的配色不容易呢…
填充顏色基本遵循以下步驟:指定箱線圖中每個箱子的填充顏色,如:red、green、blue、pink 等 構造字典存放箱子配色 —— {箱線圖中每個箱子patch:對應的配色color}
重新上色 —— patch.set_facecolor(color)
import matplotlib.pyplot as plt
import numpy as np
all_data=[np.random.normal(0,std,100) for std in range(1,4)]
#首先有圖(fig),然后有軸(ax)
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(9,4))
bplot1=axes[0].boxplot(all_data,
vert=True,
patch_artist=True)
bplot2 = axes[1].boxplot(all_data,
notch=True,
vert=True,
patch_artist=True)
#顏色填充
colors = ['pink', 'lightblue', 'lightgreen']
for bplot in (bplot1, bplot2):
for patch, color in zip(bplot['boxes'], colors):
patch.set_facecolor(color)
plt.show()
添加網格線
你可以:指定在x軸上添加網格線(ax.xaxis.grid(True)),或者在y軸上添加網格線(ax.yaxis.grid(True))
指定 x 軸和 y 軸上的刻度個數(ax.set_xticks([1,2,3]),ax.set_yticks([1,2,3,4,5,6,7,8]))
設置 x 軸名稱(ax.set_xlabel("xlabel"))
設置 y 軸名稱(ax.set_xlabel("ylabel"))
import matplotlib.pyplot as plt
import numpy as np
all_data=[np.random.normal(0,std,100) for std in range(1,4)]
#首先有圖(fig),然后有軸(ax)
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(9,4))
bplot1=axes[0].boxplot(all_data,
vert=True,
patch_artist=True)
bplot2 = axes[1].boxplot(all_data,
notch=True,
vert=True,
patch_artist=True)
#顏色填充
colors = ['pink', 'lightblue', 'lightgreen']
for bplot in (bplot1, bplot2):
for patch, color in zip(bplot['boxes'], colors):
patch.set_facecolor(color)
# 加水平網格線
for ax in axes:
ax.yaxis.grid(True) #在y軸上添加網格線
ax.set_xticks([y+1 for y in range(len(all_data))] ) #指定x軸的軸刻度個數
## [y+1 for y in range(len(all_data))]運行結果是[1,2,3]
ax.set_xlabel('xlabel') #設置x軸名稱
ax.set_ylabel('ylabel') #設置y軸名稱
# 添加刻度
# 添加刻度名稱,我們需要使用 plt.setp() 函數:
# 加刻度名稱
plt.setp(axes, xticks=[1,2,3],
xticklabels=['x1', 'x2', 'x3'])
# 我們的刻度數是哪些,以及我們想要它添加的刻度標簽是什么。
plt.show()
import matplotlib.pyplot as plt
import numpy as np
# 添加標題
# 使用 ax.set_title 來設置單個圖形主標題,用 fig.suptitle 來設置整張畫板的標題:
data=np.random.binomial(n=10,p=0.76,size=(10,3))
labels=list("ABC")
fig,ax=plt.subplots(figsize=(9,6))
ax.boxplot(data,labels=labels,patch_artist=True)
plt.rcParams['font.sans-serif']=['SimHei'] #正確顯示中文
plt.rcParams['axes.unicode_minus']=False #用來正確顯示負號
ax.set_title("設置 fontsize=15 的標題",fontsize=15) #設置字體大小為15號字體
fig.suptitle("Boxplot Examples",fontsize=24)
plt.show()
# 想必細心的朋友已經發現了我在代碼里偷偷加了兩行設置字體的代碼
# 這兩行代碼專為防止出現中文亂碼而生!
# plt.rcParams['font.sans-serif']=['SimHei'] # 用來正確顯示中文
# plt.rcParams['axes.unicode_minus']=False # 用來正確顯示負號
import matplotlib.pyplot as plt
# 其他參數
# 在圖上標記出均值線
fig,axes=plt.subplots(1,2,figsize=(9,5))
axes[0].boxplot(data,labels=labels,showmeans=True,meanline=False)
axes[0].set_title("默認 meanline=False",fontsize=15)
axes[1].boxplot(data,labels=labels,showmeans=True,meanline=True)
axes[1].set_title("meanline=True",fontsize=15)
plt.show()
# Note:
# meanline=False,那么均值位置會在圖中用小三角表示出來
# meanline=True,那么均值位置會在圖中用虛線表示出來
import matplotlib.pyplot as plt
# 在圖上去除離群值
fig,axes=plt.subplots(1,2,figsize=(9,5))
axes[0].boxplot(data,labels=labels,patch_artist=True)
axes[0].set_title("默認 showfliers=True",fontsize=15)
axes[1].boxplot(data,labels=labels,patch_artist=True,showfliers=False)
axes[1].set_title("showfliers=False",fontsize=15)
plt.show()
# 默認 showfliers=True,那么圖中會顯示出離群值
# showfliers=False,那么圖中會去除離群值
matplotlib可視化箱線圖Github地址?github.com
此文章為最迷糊原創,特此聲明!
總結
以上是生活随笔為你收集整理的matplotlib 均值_matplotlib可视化箱线图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker学习(八)深入浅出理解 do
- 下一篇: 计算机英语手抄报活动主题,英语手抄报比赛