排序 (Ranking)
棒棒糖圖 (Lollipop Chart)
棒棒糖圖表以一種視覺上令人愉悅的方式提供與有序條形圖類似的目的。
https://datawhalechina.github.io/pms50/#/chapter16/chapter16
導入所需要的庫
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) # 對'mpg_z這一列數據進行排序 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 = 2) # 柱狀圖的線寬 # 繪制柱形圖上的散點 ax.scatter(x = df.index, # 橫坐標 y = df.cty, # 縱坐標 s = 75, # 散點的尺寸 color = 'firebrick', # 顏色 alpha = 0.7) # 透明度 # step3:裝飾 # 設置標題、縱坐標的范圍、橫縱坐標的標題 ax.set_title('Lollipop Chart for Highway Mileage', fontdict={'size':22}) # 設置標題以及字體大小 ax.set_ylabel('Miles Per Gallon') # 設置y軸標簽 ax.set_xticks(df.index) # 設置x軸標尺刻度 ax.set_xticklabels(df.manufacturer.str.upper(), # 刻度標尺的內容(先轉化為字符串,再轉換為大寫) rotation=60, # 旋轉角度 fontdict={'horizontalalignment': 'right', 'size':12}) # 相對於刻度標尺右移,且設置字體尺寸 ax.set_ylim(0, 30) # 設置y軸范圍 # step3: 注釋 for row in df.itertuples(): # 遍歷數據作為橫坐標 ax.text(row.Index, # 文本位置的橫坐標 row.cty+.5, # 文本位置的縱坐標 s=round(row.cty, 2), # 對text保留2位小數(照指定的小數位數進行四舍五入運算的結果) horizontalalignment= 'center', # 水平對齊參數 verticalalignment='bottom', # 垂直對齊參數 fontsize=14) # 文本尺寸 plt.show() # 顯示圖像