第五章. 可視化數(shù)據(jù)分析圖
5.3 常用圖表的繪制4—箱形圖,3D圖表
本節(jié)主要介紹常用圖表的繪制,主要包括箱形圖,3D柱形圖,3D曲面圖。
1.箱形圖(matplotlib.pyplot.boxplot)
·箱形圖又稱箱線圖、盒須圖或盒式圖
·用于顯示一組數(shù)據(jù)分散情況的統(tǒng)計圖
·優(yōu)點:不受異常值的影響,可以以一種相對穩(wěn)定的方式描述數(shù)據(jù)的離散分布情況,也常用于異常值的識別
1).語法:
matplotlib.pyplot.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
參數(shù)說明:
x:指定要繪制箱形圖的數(shù)據(jù)
notch:是否以凹口的形式展現(xiàn)箱形圖,默認False
sym:指定異常點的形狀,默認‘+’
vert:是否需要將箱形圖垂直擺放,默認True
whis:指定上下限與上下四分位的距離,默認1.5倍的四分位差
positions :指定箱形圖的位置,默認位[0,1,2…]
widths:指定箱形圖的寬度,默認為0.5
patch_artist:是否填充箱體的顏色
meanline:是否用線的形式表示均值,默認用點
showmeans: 是否顯示均值,默認False
showcaps:是否顯示箱形圖頂端和末端的兩條線,默認True
showbox:是否顯示箱形圖的箱體,默認True
showfliers:是否顯示異常值,默認True
boxprops:設(shè)置箱子的屬性,如邊框色,填充色
labels:為箱體填充標簽,類似于圖例
flierprops: 設(shè)置異常值的屬性,如異常點的形狀,顏色,填充色
medianprops:設(shè)置中位數(shù)的屬性,如線的類型,顏色
meanprops: 設(shè)置均值的屬性,如點的大小,顏色
capprops:設(shè)置箱形圖頂端和末端線條的屬性,如顏色,粗線
whiskerprops:設(shè)置必須的屬性,如顏色,粗細,線的類型等
2).示例:
清單.xlsx表格中的數(shù)據(jù)
import pandas as pd
import matplotlib.pyplot as plt
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('F:\\Note\\清單.xlsx', sheet_name='Sheet6')
plt.boxplot(x=df['value'], whis=1.5, widths=0.5, patch_artist=True, showmeans=True, boxprops={'facecolor': 'c'},
flierprops={'markerfacecolor': 'red', 'markersize': 4},
meanprops={'marker': '*', 'markerfacecolor': 'skyblue'}, medianprops={'linestyle': '--', 'color': 'orange'},
capprops={'color': 'r'})
Q1 = df['value'].quantile(q=0.25)
Q2 = df['value'].quantile(q=0.5)
Q3 = df['value'].quantile(q=0.75)
low_limit = Q1 - 1.5 * (Q3 - Q1)
upper_limit = Q3 + 1.5 * (Q3 - Q1)
print('下四分位數(shù):', Q1)
print('中位數(shù):', Q2)
print('上四分位數(shù):', Q3)
print('下限:', low_limit)
print('上限:', upper_limit)
# 查找異常值
val = df['value'][(df['value'] > upper_limit) | (df['value'] < low_limit)]
print('數(shù)據(jù)中的異常值:', val)
#顯示圖像
plt.show()
結(jié)果展示:
3).數(shù)學(xué)層面理解箱形圖每個部分的含義(下四分位線,中位數(shù),上四分位數(shù),上限,下限,異常值,極端異常值)
-
名詞說明:
·下四分位數(shù):指數(shù)據(jù)的25%分位點所對應(yīng)的值(Q1)
·中位數(shù):指數(shù)據(jù)的50%分位點所對應(yīng)的值(Q2)
·上四分位數(shù):指數(shù)據(jù)的75%分位點所對應(yīng)的值(Q3)
·上限:上限=Q3+1.5*(Q3-Q1)
·下限:下限=Q1-1.5*(Q3-Q1)
·異常值的判定標準:當變量的數(shù)據(jù)值大于上限或小于下限時,判定為異常值 -
計算方法:
1).數(shù)據(jù)集:7,36,15,39,41,40
2).按從小到大的順序?qū)?shù)據(jù)集進行排列:7,15,36,39,40,41
3)確定四分位數(shù)索引位置的根據(jù)公式:1+(n-1)*數(shù)據(jù)的百分比分位點,在根據(jù)索引位置確定索引所對應(yīng)的數(shù)據(jù)值(n是數(shù)據(jù)集的數(shù)量 n=6)
·Q1_position=1+(6-1)*0.25=2.25 (Q1在第二個數(shù)和第三個數(shù)之間)
·Q1_value=15+(36-15)*(2.25-2)=20.25
·Q2_position=1+(6-1)*0.5=3.5 (Q2在第三個數(shù)和第四個數(shù)之間)
·Q2_value=36+(39-36)*(3.5-3)=37.5
·Q3_position=1+(6-1)*0.75=4.75 (Q3在第四個數(shù)和第五個數(shù)之間)
·Q3_value=39+(40-39)*(4.75-4)=39.75
·上限=39.75+(39.75-20.25)*1.5=69
·下限=20.25-(39.75-20.25)*1.5=-9 -
極端異常值:
·極端上限:上限=Q3+3*(Q3-Q1)
·極端下限:下限=Q1-3*(Q3-Q1)
·極端異常值的判定標準:當變量的數(shù)據(jù)值大于極端上限或小于極端下限時,判定為極端異常值
2.3D圖表—三維柱形圖
1).語法:
mpl_toolkits.mplot3d.axes3d.bar(left, height, zs=0, zdir=‘z’, *args, **kwargs)
參數(shù)說明:
left:x軸數(shù)據(jù)集
height:柱子的高度
zs:z軸的數(shù)據(jù)集
zdir:可選參數(shù){‘x’, ‘y’, ‘z’}, 默認: ‘z’
2).示例:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解決中文亂碼
plt.rcParams['axes.unicode_minus'] = False # 解決負號不顯示的問題
#創(chuàng)建畫布
fig = plt.figure()
# 創(chuàng)建3D坐標系
axes3d = Axes3D(fig)
x = np.arange(0, 5)
zs = np.arange(1,15,5)
for z in zs:
y = np.random.randint(0, 100, size=5)
axes3d.bar(x, y, zs=z, zdir='x', color=['r', 'g', 'y', 'c'])
plt.xticks(zs, ['小明', '小美', '小強'])
plt.yticks(x, ['語文', '數(shù)學(xué)', '英語', '物理', '生物'])
plt.xlabel('姓名')
plt.ylabel('學(xué)科')
# 設(shè)置標題和圖例
plt.title('學(xué)生成績統(tǒng)計')
# 調(diào)整圖表與畫布邊緣間距
plt.subplots_adjust(left=0.15, bottom=0.15, right=0.9, top=0.9)
# 坐標軸的刻度線向內(nèi)顯示還是向外顯示
plt.tick_params(left=True, bottom=True, right=False, top=False)
plt.show()
結(jié)果展示:
2.3D圖表—三維曲面圖
1).語法:
mpl_toolkits.mplot3d.axes3d.plot_surface( X, Y, Z, *, norm=None, vmin=None,vmax=None, lightsource=None, **kwargs)
參數(shù)說明:
X, Y, Z,:2D數(shù)組形式的數(shù)據(jù)值
rstride:數(shù)組行距(步長大?。?br> cstride:數(shù)組列距(步長大?。?br> color:曲面塊顏色
cmap:顏色塊顏色映射
facecolors:單獨曲面塊表面顏色
norm:將值映射為顏色的 Nonnalize實例
vmin:映射的最小值
vmax:映射的最大值文章來源:http://www.zghlxwxcb.cn/news/detail-435027.html
2).示例:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解決中文亂碼
plt.rcParams['axes.unicode_minus'] = False # 解決負號不顯示的問題
#創(chuàng)建畫布
fig = plt.figure()
# 創(chuàng)建3D坐標系
axes3d = Axes3D(fig)
x = np.arange(-5.0, 5.0,0.5)
y = np.arange(-3.0,3,0.5)
#返回list,對x,y數(shù)據(jù)進行網(wǎng)格化
X,Y=np.meshgrid(x,y)
Z1=np.sin(X)
Z2=np.sin(Y)
Z=(Z1-Z2)*2
surf=axes3d.plot_surface(X, Y, Z, cmap=plt.get_cmap('rainbow'))
# 設(shè)置標題
plt.title("3D曲面圖")
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
結(jié)果展示:文章來源地址http://www.zghlxwxcb.cn/news/detail-435027.html
注意:代碼中所涉及到的函數(shù)和參數(shù),在圖表的常用設(shè)置1 和 圖表的常用設(shè)置2 有所介紹
到了這里,關(guān)于第五章. 可視化數(shù)據(jù)分析圖表—常用圖表的繪制4—箱形圖,3D圖表的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!