https://datawhalechina.github.io/pms50/#/chapter7/chapter7
邊緣箱形圖 (Marginal Boxplot)
邊緣箱圖與邊緣直方圖具有相似的用途。 然而,箱線圖有助於精確定位 X 和 Y 的中位數、第25和第75百分位數。
導入所需要的庫
import numpy as np # 導入numpy庫 import pandas as pd # 導入pandas庫 import matplotlib as mpl # 導入matplotlib庫 import matplotlib.pyplot as plt import seaborn as sns # 導入seaborn庫 %matplotlib inline # 在jupyter notebook顯示圖像
設定圖像各種屬性
large = 22; med = 16; small = 12 params = {'axes.titlesize': large, # 設置子圖上的標題字體 'legend.fontsize': med, # 設置圖例的字體 'figure.figsize': (16, 10), # 設置圖像的畫布 'axes.labelsize': med, # 設置標簽的字體 'xtick.labelsize': med, # 設置x軸上的標尺的字體 'ytick.labelsize': med, # 設置整個畫布的標題字體 'figure.titlesize': large} plt.rcParams.update(params) # 更新默認屬性 plt.style.use('seaborn-whitegrid') # 設定整體風格 sns.set_style("white") # 設定整體背景風格
程序代碼
# step1:導入數據
df = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/mpg_ggplot2.csv")
# step2:創建子圖對象與網格
# 畫布 fig = plt.figure(figsize = (16, 10), # 畫布大小_(16, 10) dpi = 80) # 分辨率_80 # 網格 grid = plt.GridSpec(4, # 行數 4, # 列數 hspace = 0.5, # 行與行之間的間隔 wspace = 0.2) # 列與列之間的間隔
# step3:明確子圖的位置
# 確定如圖所示散點圖的位置 ax_main = fig.add_subplot(grid[:-1, :-1]) # 確定如圖所示右邊邊緣箱形圖的位置 ax_right = fig.add_subplot(grid[:-1, -1], xticklabels = [], yticklabels = []) # 確定如圖所示最底下邊緣箱形圖的位置 ax_bottom = fig.add_subplot(grid[-1, 0:-1], xticklabels = [], yticklabels = [])
# step4:散點圖
ax_main.scatter('displ', # 橫坐標 'hwy', # 縱坐標 s= df.cty * 5, # 設置點的尺寸 c = df.manufacturer.astype('category').cat.codes, # 顏色類別 alpha = 0.9, # 透明度 data = df, # 所使用的數據 cmap = 'tab10', # 調色板 edgecolors = 'gray', # 邊框顏色 linewidths = 0.5) # 線寬
# step5:右邊的箱線圖
sns.boxplot(df.hwy, # 需要繪制的變量 ax = ax_right, # 繪制需要的子圖 orient= 'v') # 方位__垂直
# step6:底部的箱線圖
sns.boxplot(df.displ, # 需要繪制的變量 ax = ax_bottom, # 繪制需要的子圖 orient = 'h') # 方位__水平
# step7:裝飾圖像
ax_main.set(title = 'Scatterplot with Histograms \n displ vs hwy', # 設置標題 xlabel = 'displ', # 橫坐標名稱 ylabel = 'hwy') # 縱坐標名稱 ax_main.title.set_fontsize(20) # 設置標題字體大小 # xaxis.label__x坐標軸的標題 # yaxis.label__y坐標軸的標題 # xticklabel__x坐標軸的標尺 # yticklabel__y坐標軸的標尺 # 遍歷每一個對象並且修改其字體大小 for item in ([ax_main.xaxis.label, ax_main.yaxis.label] + ax_main.get_xticklabels() + ax_main.get_yticklabels()): item.set_fontsize(14) # 修改字體大小 xlabels = ax_main.get_xticks().tolist() # 將散點圖上的x坐標軸上的標尺提取后轉換為list(一位小數) ax_main.set_xticklabels(xlabels) # 將xlabels中的數字設置為散點圖上的坐標軸上的標尺 plt.show()
博文總結
seaborn.boxplot
seaborn.boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
orient=None, color=None, palette=None, saturation=0.75, width=0.8, dodge=True,
fliersize=5, linewidth=None, whis=1.5, notch=False, ax=None, **kwargs)
seaborn.boxplot 接口的作用是繪制箱形圖以展現與類別相關的數據分布狀況。
箱形圖(或盒須圖)以一種利於變量之間比較或不同分類變量層次之間比較的方式來展示定量數據的分布。圖中矩形框顯示數據集的上下四分位數,而矩形框中延伸出的線段(觸須)則用於顯示其余數據的分布位置,剩下超過上下四分位間距的數據點則被視為“異常值”。
輸入數據可以通過多種格式傳入,包括:
- 格式為列表,numpy數組或pandas Series對象的數據向量可以直接傳遞給
x
,y
和hue
參數。 - 對於長格式的DataFrame,
x
,y
,和hue
參數會決定如何繪制數據。 - 對於寬格式的DataFrame,每一列數值列都會被繪制。
- 一個數組或向量的列表。
在大多數情況下,可以使用numpy或Python對象,但更推薦使用pandas對象,因為與數據關聯的列名/行名可以用於標注橫軸/縱軸的名稱。此外,您可以使用分類類型對變量進行分組以控制繪圖元素的順序。
此函數始終將其中一個變量視為分類,並在相關軸上的序數位置(0,1,... n)處繪制數據,即使數據屬於數值類型或日期類型也是如此。
更多信息請參閱 教程。
參數:x, y, hue
:數據
或向量數據中的變量名稱,可選
用於繪制長格式數據的輸入。查看樣例以進一步理解。
data
:DataFrame,數組,數組列表,可選
用於繪圖的數據集。如果
x
和y
都缺失,那么數據將被視為寬格式。否則數據被視為長格式。
order, hue_order
:字符串列表,可選
控制分類變量(對應的條形圖)的繪制順序,若缺失則從數據中推斷分類變量的順序。
orient
:“v” | “h”,可選
控制繪圖的方向(垂直或水平)。這通常是從輸入變量的dtype推斷出來的,但是當“分類”變量為數值型或繪制寬格式數據時可用於指定繪圖的方向。
color
:matplotlib顏色,可選
所有元素的顏色,或漸變調色板的種子顏色。
palette
:調色板名稱,列表或字典,可選
用於
hue
變量的不同級別的顏色。可以從color_palette()
得到一些解釋,或者將色調級別映射到matplotlib顏色的字典。
saturation
:float,可選
控制用於繪制顏色的原始飽和度的比例。通常大幅填充在輕微不飽和的顏色下看起來更好,如果您希望繪圖顏色與輸入顏色規格完美匹配可將其設置為
1
。
width
:float,可選
不使用色調嵌套時完整元素的寬度,或主要分組變量一個級別的所有元素的寬度。
dodge
:bool,可選
使用色調嵌套時,元素是否應沿分類軸移動。
fliersize
:float,可選
用於表示異常值觀察的標記的大小。
linewidth
:float,可選
構圖元素的灰線寬度。
whis
:float,可選
控制在超過高低四分位數時IQR的比例,因此需要延長繪制的觸須線段。超出此范圍的點將被識別為異常值。
notch
:boolean,可選
是否使矩形框“凹陷”以指示中位數的置信區間。還有其他幾個參數可以控制凹槽的繪制方式;參見
plt.boxplot
以查看關於此問題的更多幫助信息。
ax
:matplotlib軸,可選
繪圖時使用的Axes軸對象,否則使用當前Axes軸對象。
kwargs
:鍵,值映射
其他在繪圖時傳給
plt.boxplot
的參數。
返回值:ax
:matplotlib軸
返回Axes對軸象,並在其上繪制繪圖。
https://www.cntofu.com/book/172/docs/16.md