數據可視化實例(十五):有序條形圖(matplotlib,pandas)


偏差 (Deviation)

有序條形圖 (Ordered Bar Chart)

有序條形圖有效地傳達了項目的排名順序。 但是,在圖表上方添加度量標准的值,用戶可以從圖表本身獲取精確信息。

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

導入所需要的庫

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_raw = pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")
df = df_raw[['cty', 'manufacturer']].groupby('manufacturer').apply(lambda x:x.mean())
df.sort_values('cty', inplace = True)
df.reset_index(inplace = True)

# step2:繪制有序條形圖
    # 創建畫布對象以及子圖對象
fig,ax = plt.subplots(figsize = (16, 10),    # 畫布尺寸
                     facecolor = 'white',    # 畫布顏色
                     dpi = 80)               # 分辨率
    # 繪制柱狀圖
ax.vlines(x = df.index,                 # 橫坐標
         ymin = 0,                      # 柱狀圖在y軸的起點
         ymax = df.cty,                 # 柱狀圖在y軸的終點
         color = 'firebrick',           # 柱狀圖的顏色
         alpha = 0.7,                   # 柱狀圖的透明度
         linewidth = 20)                # 柱狀圖的線寬

# step3:添加文本
    # enumerate() 函數用於將一個可遍歷的數據對象(如列表、元組或字符串)組合為一個索引序列,同時列出數據和數據下標,
for i, cty, in enumerate(df.cty):       
    ax.text(i,                                  # 文本的橫坐標位置
            cty+0.5,                            # 文本的縱坐標位置
            round(cty, 1),                      # 對文本中數據保留一位小數
            horizontalalignment = 'center')     # 相對於xy軸,水平對齊

# step4:裝飾
ax.set_title('Bar Chart for Highway Mileage',   # 子圖標題名稱
            fontdict = {'size': 22})            # 標題字體尺寸
ax.set(ylabel = 'Miles Per Gallon',             # 縱坐標的標題名稱
      ylim = (0,30))                            # 縱坐標的取值范圍
    # 橫坐標的刻度標尺
plt.xticks(df.index,                            # 橫坐標的刻度位置
          df.manufacturer.str.upper(),          # 刻度標尺的內容(先轉化為字符串,再轉換為大寫)
          rotation = 60,                        # 旋轉角度
          horizontalalignment = 'right',        # 相對於刻度標尺右移
          fontsize = 12)                        # 字體尺寸

# step5:添加補丁
    # 添加綠色的補丁
p1 = patches.Rectangle((0.57, -0.005),                # 矩形左下角坐標 
                      width = 0.33,                   # 矩形的寬度
                      height = 0.13,                  # 矩形的高度
                      alpha = 0.1,                    # 矩陣的透明度
                      facecolor = 'green',            # 是否填充矩陣(設置為綠色)
                      transform = fig.transFigure)    # 保持矩形顯示在圖像最上方
    # 添加紅色的補丁
p2 = patches.Rectangle((0.124, -0.005),               # 矩形左下角坐標
                      width = 0.446,                   # 矩形的寬度
                      height = 0.13,                  # 矩形的高度
                      alpha = 0.1,                    # 矩陣的透明度
                      facecolor = 'red',              # 是否填充矩陣(設置為紅色)
                      transform = fig.transFigure)     # 保持矩形顯示在圖像最上方
    # 將補丁添加至畫布
fig.add_artist(p1)    # 將p1添加至畫布上
fig.add_artist(p2)    # 將p2添加至畫布上
plt.show()            # 顯示圖像

 

 

matplotlib.pyplot.vlines

matplotlib.pyplot.vlines(x, ymin, ymax, colors='k', linestyles='solid', label='', *, data=None, **kwargs)[源代碼]

繪制垂直線。

在每個位置繪制垂直線 x 從 ymin 到 ymax .

參數:
x  標量或一維數組

x-繪制線條的索引。

YMIN,YMAX  標量或一維數組

每行的開始和結束。如果提供標量,則所有行的長度都相同。

colors  類似顏色的數組,可選,默認值:“k”
直線運動  'solid'、'dashdot'、'dashdot'、'dotted',可選
標簽  字符串,可選,默認:“”
返回:
 :  LineCollection  LineCollection
其他參數:
**kwargs :  LineCollection 性質。  LineCollection屬性。


免責聲明!

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



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