Python数据可视化:如何创建箱线图
一圖勝千言,使用Python的matplotlib庫,可以快速創建高質量的圖形。
我們團隊推出一個新的系列教程:Python數據可視化,針對初級和中級用戶,將理論和示例代碼相結合,使用matplotlib, seaborn, plotly等工具實現可視化。
本文的主題是如何用Matplotlib創建箱線圖(boxplot)。
import numpy as np import matplotlib.pyplot as plt%matplotlib inlineplt.style.use("ggplot")1. 創建基礎箱線圖
箱線圖(box-plot): 描述數值變量分布的統計圖表,使用的樣本統計量包括最小值,最大值,中位數,25%分位數(下四分位數),75%分位數(上四分位數)。在箱線圖中,x軸表示數據的類別,y軸表示數據的分布。
Matplotlib創建箱線圖的接口:boxplot(x, notch, vert, patch_artist, whis, widths, labels)
參數:
- x: 包含數值變量的數組(一個箱體),或包含多個向量的數組(多個箱體)
- notch: True -> 鋸齒形箱體,False -> 矩形箱體
- vert: True -> 垂直箱體,False -> 水平箱體
- patch_artist: True -> 用Patch Artist而不是Line2D創建箱體,前者可以高度定制箱體的樣式
- whis: 浮點值或包含兩個浮點值的元組,默認為1.5,控制須線的位置
- 浮點值,箱體下方的須線 = Q1?whis?(Q3?Q1)Q1 - whis*(Q3-Q1)Q1?whis?(Q3?Q1),箱體上方的須線 = Q3+whis?(Q3?Q1)Q3 + whis*(Q3-Q1)Q3+whis?(Q3?Q1),Q1和Q3分別是25%分位數和75%分位數
- 包含浮點值的元組,(5.0, 95.0)表示須線覆蓋5%分位數到95%分位數,(0, 100)表示覆蓋最小值到最大值
- widths: 浮點值或浮點值數組,設置箱體的寬度,默認為0.5
- labels: 每個箱體的標簽,長度和x相同
一般情況下,箱線圖用于對比多個數值變量的分布。
np.random.seed(123)arr_1 = np.random.normal(100, 10, 200) arr_2 = np.random.normal(90, 20, 200) arr_3 = np.random.normal(80, 30, 200) arr_4 = np.random.normal(70, 40, 200) arrs = [arr_1, arr_2, arr_3, arr_4]fig, ax = plt.subplots(figsize=(10, 7)) bp = ax.boxplot(arrs, showmeans=True) # 設置showmeans=True可以添加均值到箱體中 ax.set_title("Comparison of Distributions for multiple variables", fontsize=15)2. 調整箱線圖的樣式
boxplot()返回一個包含所有幾何圖形對象的字典,通過調用相應對象的set方法,可以高度定制箱線圖的樣式。
# 查看boxplot()返回什么對象 bp {'whiskers': [<matplotlib.lines.Line2D at 0x7f9b379aed60>,<matplotlib.lines.Line2D at 0x7f9b379ba100>,<matplotlib.lines.Line2D at 0x7f9b379c5910>,<matplotlib.lines.Line2D at 0x7f9b379c5c70>,<matplotlib.lines.Line2D at 0x7f9b379dc490>,<matplotlib.lines.Line2D at 0x7f9b379dc7f0>,<matplotlib.lines.Line2D at 0x7f9b37967fd0>,<matplotlib.lines.Line2D at 0x7f9b37972370>],'caps': [<matplotlib.lines.Line2D at 0x7f9b379ba460>,<matplotlib.lines.Line2D at 0x7f9b379ba7c0>,<matplotlib.lines.Line2D at 0x7f9b379c5fd0>,<matplotlib.lines.Line2D at 0x7f9b379cf370>,<matplotlib.lines.Line2D at 0x7f9b379dcb50>,<matplotlib.lines.Line2D at 0x7f9b379dceb0>,<matplotlib.lines.Line2D at 0x7f9b379726d0>,<matplotlib.lines.Line2D at 0x7f9b37972a30>],'boxes': [<matplotlib.lines.Line2D at 0x7f9b379aea00>,<matplotlib.lines.Line2D at 0x7f9b379c55b0>,<matplotlib.lines.Line2D at 0x7f9b379dc130>,<matplotlib.lines.Line2D at 0x7f9b37967c70>],'medians': [<matplotlib.lines.Line2D at 0x7f9b379bab50>,<matplotlib.lines.Line2D at 0x7f9b379cf6d0>,<matplotlib.lines.Line2D at 0x7f9b37967250>,<matplotlib.lines.Line2D at 0x7f9b37972d90>],'fliers': [<matplotlib.lines.Line2D at 0x7f9b379c51f0>,<matplotlib.lines.Line2D at 0x7f9b379cfd30>,<matplotlib.lines.Line2D at 0x7f9b379678b0>,<matplotlib.lines.Line2D at 0x7f9b3797d430>],'means': [<matplotlib.lines.Line2D at 0x7f9b379bae50>,<matplotlib.lines.Line2D at 0x7f9b379cf9d0>,<matplotlib.lines.Line2D at 0x7f9b37967550>,<matplotlib.lines.Line2D at 0x7f9b3797d0d0>]} np.random.seed(123)arr_1 = np.random.normal(100, 10, 200) arr_2 = np.random.normal(90, 20, 200) arr_3 = np.random.normal(80, 30, 200) arr_4 = np.random.normal(70, 40, 200) arrs = [arr_1, arr_2, arr_3, arr_4]fig, ax = plt.subplots(figsize=(10, 7))# 創建箱線圖 bp = ax.boxplot(x=arrs,patch_artist=True, # 用Patch Artist而不是Line2D Artist創建箱體notch=True, # 鋸齒形箱體vert=False # 水平箱線圖 )# 設置箱體顏色 # boxplot不提供color參數,要設置箱體顏色,首先要從boxplot()返回的結果中 # 獲取Patch Artists對象,然后再調用set_color() colors = ["red", "yellow", "green", "gray"] for patch, color in zip(bp["boxes"], colors):# set_facecolor: 設置箱體內部顏色# set_edgecolor: 設置箱體邊框顏色# set_color: 設置箱體內部和邊框的顏色patch.set_facecolor(color)# 設置須線的形狀,大小,顏色 for whisker in bp["whiskers"]:whisker.set(color="red",linestyle="dashed",linewidth=1.5)# 設置須線帽檐(caps)的樣式 for cap in bp["caps"]:cap.set(color="blue",linewidth=2.5)# 設置中位數的樣式 for median in bp["medians"]:median.set(color="black",linewidth=2.0)# 設置極值點的樣式,超出帽檐的點就是極值點 for flier in bp["fliers"]:flier.set(marker="o",markersize=8,markerfacecolor="red",alpha=0.5)# 設置y軸標簽和標題 ax.set_yticklabels(["A", "B", "C", "D"]) ax.set_title("Custom Boxplot", fontsize=15)
如果喜歡我們的文章,記得點贊和收藏哦,我們每天都會為大家帶來Python,數據科學和量化交易的精品內容。
【關于我們】
蜂鳥數據:國內領先的金融數據API提供商。
蜂鳥數據團隊由業界頂尖的數據工程師,數據科學家和寬客組成,我們正努力構建一個強大的金融數據庫,并提供API接口,目標是令金融數據開源化和平民化。
瀏覽并測試我們接口吧,目前覆蓋股票,外匯,商品期貨,數字貨幣和宏觀經濟領域,包括實時報價(tick)和歷史數據(分鐘),提供REST API和Websocket兩種接入方式,能夠滿足金融分析師,量化交易和理財app的需求。
需要金融數據?利用蜂鳥API將數據整合到您的應用
如果您準備好了,請登錄蜂鳥官網,注冊免費獲取API密鑰,然后開始探索我們的金融數據庫吧。
總結
以上是生活随笔為你收集整理的Python数据可视化:如何创建箱线图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用阿里云的OSS图片上传,这里是用的上
- 下一篇: 使用nLite软件加载SATA硬盘驱动