Python圖表數據可視化Seaborn:2. 分類數據可視化-分類散點圖|分布圖(箱型圖|小提琴圖|LV圖表)|統計圖(柱狀圖|折線圖)


1. 分類數據可視化 - 分類散點圖

stripplot( ) / swarmplot( )

sns.stripplot(x="day",y="total_bill",data=tips,jitter = True, size = 5, edgecolor = 'w',linewidth=1,marker = 'o')
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
% matplotlib inline

sns.set_style("whitegrid")
sns.set_context("paper")
# 設置風格、尺度

import warnings
warnings.filterwarnings('ignore') 
# 不發出警告
# 1、stripplot()
# 按照不同類別對樣本數據進行分布散點圖繪制

tips = sns.load_dataset("tips")
print(tips.head())
# 加載數據
print(tips['day'].value_counts())
sns.stripplot(x="day", # x → 設置分組統計字段 y="total_bill", # y → 數據分布統計字段 # 這里xy數據對調,將會使得散點圖橫向分布 data=tips, # data → 對應數據 jitter = True, # jitter → 當點數據重合較多時,用該參數做一些調整,也可以設置間距如:jitter = 0.1 size = 5, edgecolor = 'w',linewidth=1,marker = 'o' # 設置點的大小、描邊顏色或寬度、點樣式 )

1.1 stripplot()

  hue參數可再分類

# 1、stripplot() 通過hue參數再分類

sns.stripplot(x="sex", y="total_bill", hue="day",
              data=tips, jitter=True)

# 1、stripplot() 設置調色盤

sns.stripplot(x="sex", y="total_bill", hue="day",
              data=tips, jitter=True,
              palette="Set2",  # 設置調色盤
              dodge=True,  # 是否拆分
             )

# 1、stripplot() 篩選分類類別

print(tips['day'].value_counts())
# 查看day字段的唯一值

sns.stripplot(x="day", y="total_bill", data=tips,jitter = True, 
              order = ['Sat','Sun'])
# order → 篩選類別

1.2 swarmplot()分簇散點圖

# 2、swarmplot()
# 分簇散點圖

sns.swarmplot(x="total_bill", y="day", data=tips,
              size = 5, edgecolor = 'w',linewidth=1,marker = 'o',
              palette = 'Reds')
# 用法和stripplot類似

2. 分類數據可視化 - 分布圖

boxplot( ) / violinplot( ) / lvplot( ) 

 2.1 boxplot()箱型圖

sns.boxplot(x="day", y="total_bill", data=tips,
            linewidth = 2,   # 線寬
            width = 0.8,     # 箱之間的間隔比例
            fliersize = 3,   # 異常點大小
            palette = 'hls', # 設置調色板
            whis = 1.5,      # 設置IQR 
            notch = True,    # 設置是否以中值做凹槽
            order = ['Thur','Fri','Sat','Sun'],  # 篩選類別
# 1、boxplot()
# 箱型圖

sns.boxplot(x="day", y="total_bill", data=tips,
            linewidth = 2,   # 線寬
            width = 0.8,     # 箱之間的間隔比例
            fliersize = 3,   # 異常點大小
            palette = 'hls', # 設置調色板
            whis = 1.5,      # 設置IQR 
            notch = True,    # 設置是否以中值做凹槽
            order = ['Thur','Fri','Sat','Sun'],  # 篩選類別
           )
# 繪制箱型圖

sns.swarmplot(x="day", y="total_bill", data=tips,color ='k',size = 3,alpha = 0.8)
# 可以添加散點圖

# 1、boxplot() 通過hue參數再分類

sns.boxplot(x="day", y="total_bill", data=tips,
            hue = 'smoker', palette = 'Reds')
# 繪制箱型圖

#sns.swarmplot(x="day", y="total_bill", data=tips,color ='k',size = 3,alpha = 0.8)
# 可以添加散點圖

2.2 violinplot()小提琴圖

sns.violinplot(x="day", y="total_bill", data=tips,
            linewidth = 2,   # 線寬
            width = 0.8,     # 箱之間的間隔比例
            palette = 'hls', # 設置調色板
            order = ['Thur','Fri','Sat','Sun'],  # 篩選類別
            scale = 'area',  # 測度小提琴圖的寬度:area-面積相同,count-按照樣本數量決定寬度,width-寬度一樣
            gridsize = 50,   # 設置小提琴圖邊線的平滑度,越高越平滑
            inner = 'box',   # 設置內部顯示類型 → “box”, “quartile”, “point”, “stick”, None
            #bw = 0.8        # 控制擬合程度,一般可以不設置
           )
# 2、violinplot()  小提琴圖

sns.violinplot(x="day", y="total_bill", data=tips,
            linewidth = 2,   # 線寬
            width = 0.8,     # 箱之間的間隔比例
            palette = 'hls', # 設置調色板
            order = ['Thur','Fri','Sat','Sun'],  # 篩選類別
            scale = 'area',  # 測度小提琴圖的寬度:area-面積相同,count-按照樣本數量決定寬度,width-寬度一樣
            gridsize = 50,   # 設置小提琴圖邊線的平滑度,越高越平滑
            inner = 'box',   # 設置內部顯示類型 → “box”, “quartile”, “point”, “stick”, None
            #bw = 0.8        # 控制擬合程度,一般可以不設置
           )
# 用法和boxplot類似

# 2、violinplot() 通過hue參數再分類

sns.violinplot(x="day", y="total_bill", data=tips,
               hue = 'smoker', palette="muted", 
               split=True,  # 設置是否拆分小提琴圖
               inner="quartile")

sns.violinplot()+ sns.swarmplot()小提琴圖結合散點圖
# 2、violinplot()  結合散點圖

sns.violinplot(x="day", y="total_bill", data=tips, palette = 'hls', inner = None)
sns.swarmplot(x="day", y="total_bill", data=tips, color="w", alpha=.5)
# 插入散點圖

2.3 lvplot() LV圖表

sns.lvplot(x="day", y="total_bill", data=tips, palette="mako",
           #hue = 'smoker',
           width = 0.8,           # 箱之間間隔比例
           linewidth = 12,
           scale = 'area',        # 設置框的大小 → “linear”、“exonential”、“area”
           k_depth = 'proportion',  # 設置框的數量 → “proportion”、“tukey”、“trustworthy”
          )
# 3、lvplot()  LV圖表

sns.lvplot(x="day", y="total_bill", data=tips, palette="mako",
           #hue = 'smoker',
           width = 0.8,           # 箱之間間隔比例
           linewidth = 12,
           scale = 'area',        # 設置框的大小 → “linear”、“exonential”、“area”
           k_depth = 'proportion',  # 設置框的數量 → “proportion”、“tukey”、“trustworthy”
          )
# 繪制LV圖

sns.swarmplot(x="day", y="total_bill", data=tips,color ='k',size = 3,alpha = 0.8)
# 可以添加散點圖

 

3. 分類數據可視化 - 統計圖

barplot( ) / countplot( ) / pointplot( )

3.1 barplot()柱狀圖

sns.barplot(x="sex", y="survived", hue="class", data=titanic,
            palette = 'hls', 
            order = ['male','female'],  # 篩選類別
            capsize = 0.05,  # 誤差線橫向延伸寬度
            saturation=.8,   # 顏色飽和度
            errcolor = 'gray',errwidth = 2,  # 誤差線顏色,寬度
            ci = 'sd'    # 置信區間誤差 → 0-100內值、'sd'、None
            )
# 1、barplot()
# 柱狀圖 - 置信區間估計
# 置信區間:樣本均值 + 抽樣誤差

titanic = sns.load_dataset("titanic")
print(titanic.head())
print('-----')
# 加載數據

sns.barplot(x="sex", y="survived", hue="class", data=titanic,
            palette = 'hls', 
            order = ['male','female'],  # 篩選類別
            capsize = 0.05,  # 誤差線橫向延伸寬度
            saturation=.8,   # 顏色飽和度
            errcolor = 'gray',errwidth = 2,  # 誤差線顏色,寬度
            ci = 'sd'    # 置信區間誤差 → 0-100內值、'sd'、None
            )

print(titanic.groupby(['sex','class']).mean()['survived'])
print(titanic.groupby(['sex','class']).std()['survived'])
# 計算數據

 

# 1、barplot()
# 柱狀圖 - 置信區間估計 

sns.barplot(x="day", y="total_bill", hue="sex", data=tips,
            palette = 'Blues',edgecolor = 'w')
tips.groupby(['day','sex']).mean()
# 計算數據

# 1、barplot()
# 柱狀圖 - 置信區間估計

crashes = sns.load_dataset("car_crashes").sort_values("total", ascending=False)
print(crashes.head())
# 加載數據

f, ax = plt.subplots(figsize=(6, 15))
# 創建圖表

sns.set_color_codes("pastel")
sns.barplot(x="total", y="abbrev", data=crashes,
            label="Total", color="b",edgecolor = 'w')
# 設置第一個柱狀圖

sns.set_color_codes("muted")
sns.barplot(x="alcohol", y="abbrev", data=crashes,
            label="Alcohol-involved", color="b",edgecolor = 'w')
# 設置第二個柱狀圖

ax.legend(ncol=2, loc="lower right")
sns.despine(left=True, bottom=True)

3.2 countplot()計數柱狀圖 

sns.countplot(x="class", hue="who", data=titanic,palette = 'magma')
# 2、countplot()  計數柱狀圖

sns.countplot(x="class", hue="who", data=titanic,palette = 'magma')
#sns.countplot(y="class", hue="who", data=titanic,palette = 'magma')  
# x/y → 以x或者y軸繪圖(橫向,豎向)
# 用法和barplot相似

3.3 pointplot()折線圖

# 3、pointplot()
# 折線圖 - 置信區間估計

sns.pointplot(x="time", y="total_bill", hue = 'smoker',data=tips,
              palette = 'hls',
              dodge = True,   # 設置點是否分開
              join = True,    # 是否連線
              markers=["o", "x"], linestyles=["-", "--"],  # 設置點樣式、線型
              )
tips.groupby(['time','smoker']).mean()['total_bill']
# 計算數據
# # 用法和barplot相似

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM