數據可視化實例(八): 邊緣直方圖(matplotlib,pandas)


https://datawhalechina.github.io/pms50/#/chapter6/chapter6

邊緣直方圖 (Marginal Histogram)

邊緣直方圖具有沿 X 和 Y 軸變量的直方圖。 這用於可視化 X 和 Y 之間的關系以及單獨的 X 和 Y 的單變量分布。 這種圖經常用於探索性數據分析(EDA)。

導入所需要的庫

# 導入numpy庫
import numpy as np
# 導入pandas庫
import pandas as pd
# 導入matplotlib庫
import matplotlib as mpl
import matplotlib.pyplot as plt
# 導入seaborn庫
import seaborn as sns
# 在jupyter notebook顯示圖像
%matplotlib inline

設定圖像各種屬性

large = 22; med = 16; small = 12
            # 設置子圖上的標題字體
params = {'axes.titlesize': large,  
            # 設置圖例的字體
          'legend.fontsize': med,
            # 設置圖像的畫布
          'figure.figsize': (16, 10),  
            # 設置標簽的字體
          'axes.labelsize': med, 
            # 設置x軸上的標尺的字體
          'xtick.labelsize': med,  
            # 設置整個畫布的標題字體
          '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,               # 分辨率
                 facecolor = 'white')    # 背景顏色,默認為白色
    # 網格

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:散點圖

    # category__Category是pandas的一種數據類型
    # astype__實現變量類型轉換
    # cat__獲取分類變量的類別
    # codes__按照類別編碼
ax_main.scatter('displ',             # 橫坐標
               'hwy',                # 縱坐標
                s = df.cty*4,        # 設置點的尺寸
               data = df,            # 所使用的數據
               c = df.manufacturer.astype('category').cat.codes,   # 顏色類別
                cmap = 'tab10',      # 調色板
                edgecolors = 'gray', # 邊框顏色
                linewidths = 0.5,    # 線寬
                alpha = 0.9)          # 透明度

# step5:右邊的直方圖

ax_right.hist(df.hwy,                 # 需要繪圖的變量
             40,                      # 需要分為多少段
             histtype = 'stepfilled', # 生成一個的線條輪廓
             orientation = 'horizontal',  # 方位__水平
             color = 'deeppink')      # 顏色__深粉色

# step6:底部的直方圖

ax_bottom.hist(df.displ,                # 需要繪圖的變量
              40,                       # 需要分為多少段
              histtype = 'stepfilled',  # 生成一個的線條輪廓
              orientation = 'vertical', # 方位__垂直
              color = 'deeppink')       # 顏色__深粉色
ax_bottom.invert_yaxis()

# 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()                              # 顯示圖像

 

博文總結

matplotlib.pyplot.hist(x,bins=None,range=None, density=None, bottom=None, histtype='bar', align='mid', 
log=False, color=None, label=None, stacked=False, normed=None)

關鍵參數

x: 數據集,最終的直方圖將對數據集進行統計
bins: 統計的區間分布
range: tuple, 顯示的區間,range在沒有給出bins時生效
density: bool,默認為false,顯示的是頻數統計結果,為True則顯示頻率統計結果,這里需要注意,頻率統計結果=區間數目/(總數*區間寬度),和normed效果一致,官方推薦使用density
histtype: 可選{'bar', 'barstacked', 'step', 'stepfilled'}之一,默認為bar,推薦使用默認配置,step使用的是梯狀,stepfilled則會對梯狀內部進行填充,效果與bar類似
align: 可選{'left', 'mid', 'right'}之一,默認為'mid',控制柱狀圖的水平分布,left或者right,會有部分空白區域,推薦使用默認
log: bool,默認False,即y坐標軸是否選擇指數刻度
stacked: bool,默認為False,是否為堆積狀圖

 


免責聲明!

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



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