數據可視化實例(十四):帶標記的發散型棒棒糖圖 (matplotlib,pandas)


偏差 (Deviation)

帶標記的發散型棒棒糖圖 (Diverging Lollipop Chart with Markers)

帶標記的棒棒糖圖通過強調您想要引起注意的任何重要數據點並在圖表中適當地給出推理,提供了一種對差異進行可視化的靈活方式。

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

導入所需要的庫

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庫

設定圖像各種屬性

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://github.com/selva86/datasets/raw/master/mtcars.csv")
x = df.loc[:, ['mpg']]
df['mpg_z'] = (x - x.mean()) / x.std()
df['colors'] = 'black'

# step2:改變fiat這一款車的顏色

df.loc[df.cars == 'Fiat X1-9', 'colors'] = 'darkorange'
df.sort_values('mpg_z', inplace = True)
df.reset_index(inplace = True)

# step3 繪制帶標記的發散型棒棒糖圖

    # 畫布
plt.figure(figsize = (14, 16),
          dpi = 80)
    # 條形圖
plt.hlines(df.index,             # 將y下標作為繪制直線的位置
           xmin = 0,             # 每一行的開頭
           xmax = df.mpg_z,      # 每一行的結尾
          color = df.colors,
          alpha = 0.4,
          linewidth = 1)
    # 散點圖
plt.scatter(df.mpg_z,
           df.index,
           color = df.colors,
           s = [600 if x == 'Fiat X1-9' else 300 for x in df.cars],
           alpha = 0.6)
    # y軸坐標
plt.yticks(df.index,
          df.cars)
    # x軸坐標
plt.xticks(fontsize = 12)

# step4:添加注釋

plt.annotate('Mercedes Models',                               # 文本內容
            xy = (0.0, 11.0),                                 # 注釋的起始位置    
            xytext = (1.0, 11),                               # 文本的起始位置
            xycoords = 'data',                                # xy坐標系
            fontsize = 15,                                    # 文本尺寸
            ha = 'center', va = 'center',                     # 水平對齊,垂直對齊
            bbox = dict(boxstyle = 'square',                  # 箱體的形態為方形
                       fc = 'firebrick'),                     # 箱體的顏色
            arrowprops = dict(arrowstyle = '-[, widthB = 2.0, lengthB = 1.5',  # 箭頭的類型,箭頭的長度,箭頭的寬度
                             lw = 2.0,                        # 箭頭的線寬
                             color = 'steelblue'),            # 箭頭的顏色
            color = 'white')                                  # 文本的顏色  

# step5:添加補丁

p1 = patches.Rectangle((-2.0, -1),            # 補丁左下角的坐標
                      width = .3,             # 補丁的寬度
                      height = 3,             # 補丁的高度
                      alpha = .2,             # 補丁的透明度
                      facecolor = 'red')      # 補丁內部的顏色
p2 = patches.Rectangle((1.5, 27),           # 補丁左下角的坐標
                      width = .8,             # 補丁的寬度
                      height = 5,             # 補丁的高度
                      alpha = .2,             # 補丁的透明度
                      facecolor = 'green')    # 補丁內部的顏色
plt.gca().add_patch(p1)                       # 獲取子圖,並且將補丁添加至子圖
plt.gca().add_patch(p2)                       # 獲取子圖,並且將補丁添加至子圖

# step6:添加裝飾

    # 設置圖像標題
plt.title('Diverging Bars of Car Mileage',    # 圖像標題名稱
          fontdict={'size':20})               # 字體尺寸
    # 設置網格線
plt.grid(linestyle='--',                      # 網格線類型
         alpha=0.5)                           # 網格線透明度
plt.show()                                    # 顯示圖像

 

 


免責聲明!

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



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