【Python】Pandas+Seaborn應用之簡單資料整理+橫向條形圖

Layson4869發表於2020-11-17

先看一下資料和期望使的結果:

在這裡插入圖片描述
在這裡插入圖片描述
資料主要是各國新冠病毒每日確診、死亡和康復的人數統計。第一張圖需要找出感染總人數前20名的國家並畫出相應的橫向條形圖;第二張圖需要畫出感染總人數前5國家的感染數和康復數的條形圖。涉及的pandas操作主要是資料讀取、分組求和、按指定列排序、資料選取切片;涉及的seaborn(部分matplotlib)的操作主要是畫條形圖、寫數字註釋、畫圖例。

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import seaborn as sns
df = pd.read_csv("df.csv")#讀入資料
data = df.groupby("Country_Region").sum().reset_index()#分組求和
data = data.sort_values("Confirmed",ascending=False)#按"Confirmed"列降序
data = data.reindex(columns=["Country_Region","Confirmed","Recovered"])#選擇之後畫圖用到的列
data1 = data[0:20]#選擇前20行
Country1 = list(data1["Country_Region"])
Confirmed1 = list(data1["Confirmed"])
Rcovered1 = list(data1["Recovered"])#轉換成列表
plt.figure(figsize=(12, 12))#畫布
plt.xlabel('Confirmed')#行標籤
plt.ylabel('Country')#列標籤
g1 = sns.barplot(x=Confirmed1, y=Country1,ci=67,orient="h")#畫條形圖,orient="h"表示橫向條形圖
for i in range(len(Confirmed1)):    
    g1.text(Confirmed1[i],i,(lambda x:format(x,','))(Confirmed1[i]),color="black",ha="left")#新增數字標註,注意用lambda函式加千分位符
plt.show()
data2 = data[0:5]#選擇前5行
Country2 = list(data2["Country_Region"])
Confirmed2 = list(data2["Confirmed"])
Rcovered2 = list(data2["Recovered"])#轉化成列表
plt.figure(figsize=(16, 5))#畫布
plt.xlabel('Country')#行標籤
plt.ylabel('Rcovered')#列標籤
g2_1 = sns.barplot(x=Confirmed2,y=Country2,ci=67,orient="h",color="r")
g2_2 = sns.barplot(x=Rcovered2, y=Country2,ci=67,orient="h",color="g")
red_patch = mpatches.Patch(color='r', label='Confirmed')
green_patch = mpatches.Patch(color='g', label='Rcovered')#設定圖例文字和格式
legend = plt.legend(handles=[red_patch,green_patch])#畫圖例
for i in range(len(Confirmed2)):    
    g2_1.text(Confirmed2[i],i,(lambda x:format(x,','))(Confirmed2[i]),color="black",ha="left")
    g2_2.text(Rcovered2[i],i,(lambda x:format(x,','))(Rcovered2[i]),color="black",ha="left")#新增數字標註
plt.show()

相關文章