在數據爆炸的時代,數據可視化已成為數據分析的關鍵環節。Python 作為強大的編程語言,擁有眾多用于數據可視化的庫,而 pandas 庫在其中扮演著重要角色。它不僅能高效處理和分析數據,還具備強大的數據可視化功能,讓我們輕松將枯燥的數據轉化為直觀、美觀的圖表。今天,就帶大家深入了解 pandas 庫的數據可視化技巧,開啟數據可視化之路!
Pandas庫可視化基礎
pandas 庫基于matplotlib構建,提供了簡單易用的數據可視化接口。在使用前,需確保已安裝 pandas 庫和 matplotlib 庫:
提前使用pip命令安裝pandas和matplotlib庫(使用阿里云鏡像)
pip install pandas matplotlib -i?https://mirrors.aliyun.com/pypi/simple/
通過import pandas as pd和import matplotlib.pyplot as plt導入這兩個庫,我們可以使用pandas庫提供的plot方法將Series和DataFrame的數據進行可視化,生成多種圖表(折線圖,直方圖,柱狀圖,箱型圖,面積圖,餅圖,散點圖,六邊形箱體圖等)。
plot方法介紹
Series和DataFrame對象都提供了plot方法,常使用兩種調用方式:
1)通過df.plot.函數名調用,如下所示
-
折線圖:df.plot.line()
-
柱狀圖:df.plot.bar()
-
水平柱狀圖:df.plot.barh()
-
直方圖:df.plot.hist()
-
箱型圖:df.plot.box()
-
面積圖:df.plot.area()
-
餅圖:df.plot.pie()
-
散點圖:df.plot.scatter()
-
六邊形箱體圖:df.plot.hexbin()
-
通過df.plot調用,如下所示
df.plot(kind='line',title='line',x='name',y='math')
Plot參數如下:當數據為Series格式或DataFrame格式時,參數稍有不同;因為Series對象是一維數據,不需要傳x軸和y軸的數據,相反DataFrame數據需要傳x軸和y軸的數據
-
kind代表("line", "bar", "barh", "kde", "scatter", "area", "hist", "box",'hexbin')表示不同的圖形,默認為line。
-
x:指定數據框的列作為x軸的值。如果不指定,則默認使用數據框的索引。
-
y:指定數據框的列作為y軸的值。如果不指定,則默認使用數據框的所有列(在繪制某些類型的圖形時,如折線圖,需要指定y軸)
-
ax:指定在哪個matplotlib的子圖對象上繪制。如果不指定,則默認使用當前的子圖。
-
subplots:指定是否使用子圖進行繪制。False:不使用子圖,所有列繪制在同一個圖上。True:使用子圖,每一列繪制在一個子圖上。按照給定的分組繪制子圖,例如[('a', 'c'), ('b', 'd')]會創建兩個子圖,一個包含列'a'和'c',另一個包含列'b'和'd'。
-
sharex:是否共享x軸。如果為True,會將一些x軸標簽設為不可見。如果傳入了ax參數,此設置可能會改變所有子圖的x軸標簽
-
sharey:是否共享y軸。如果為True,會將一些y軸標簽設為不可見。
-
layout:指定子圖的布局,例如(2, 3)表示兩行三列。
-
figsize:指定畫布的大小,例如(12, 8)表示12英寸寬8英寸高。
-
use_index:是否使用數據框的索引作為x軸的刻度。如果為False,則使用x參數指定的列作為x軸。
-
title:指定繪制的標題。如果是字符串,會打印在整個畫布的頂部;如果是列表,并且subplots為True,會打印每個列表元素在對應的子圖上方。
-
grid:是否顯示網格線。
-
legend:是否顯示圖例。在每個子圖上顯示或反轉順序。
-
style:對每列折線圖設置線的類型。
-
logx、logy、loglog:是否使用對數刻度。logx設置x軸刻度是否取對數,logy設置y軸刻度是否取對數,loglog同時設置x、y軸刻度是否取對數。
-
xticks、yticks:設置x軸、y軸的刻度值,序列形式(比如列表)。
-
xlim、ylim:設置坐標軸的范圍,列表或元組形式。
-
rot:設置軸標簽(軸刻度)的顯示旋轉度數。
-
fontsize:設置軸刻度的字體大小。
-
colormap:設置圖的區域顏色。
-
colorbar:如果為True,則繪制顏色條(僅適用于'scatter'和'hexbin'圖)。
-
xlabel和ylabel:設置x軸和y軸的標簽,描述x軸和y軸的含義
以上函數調用后,我們需要配合使用matplotlib庫幫助我們生成圖表,使用如下代碼
舉例:準備一個DataFrame數據,我們用于生成不同的圖表
import?pandas?as?pd
import?matplotlib.pyplot?as?plt
data_dict = {'group': ['A',?'B',?'C',?'D'],
'name': ['lilei',?'lili',?'wanglei',?'wangning'],
'math': [88,?75,?98,95],
'english': [94,?89,?90,87],
'yuwen': [90,?87,?89,91]}df = pd.DataFrame(data_dict)
print(df)
結果:
折線圖:df.plot.line()或df.plot(kind=line)
設置x軸為name列, y軸為math列,title=line設置標題,gtrd=True添加網格線,figsize=(4,3)設置畫布大小。
df.plot(kind='line',title='line',x='name',y='math',grid=True,figsize=(4,3))
或者df.plot.line(title='line',x='name',y='math',grid=True,figsize=(4,3))
執行后圖如下:
完整代碼如下:
import?matplotlib.pyplot?as?plt
import?pandas?as?pd
data_dict = {'group': ['A',?'B',?'C',?'D'],
'name': ['lilei',?'lili',?'wanglei',?'wangning'],
'math': [88,?75,?98,95],
'english': [94,?89,?90,87],
'yuwen': [90,?87,?89,91]}
df = pd.DataFrame(data_dict)
df.plot(kind='line',title='line',x='name',y='math',grid=True,figsize=(4,3))
或者df.plot.line(title='line',x='name',y='math',grid=True,figsize=(4,3))
plt.show()?#展示圖形
除了開頭介紹的plot對象的參數外,df.plot.line 常用的參數包括如下:
-
color:線條的顏色,可以是單個顏色值或顏色列表。
-
linestyle:線條的樣式,例如 'solid'(實線,默認)、'dashed'(虛線)、'dotted'(點線)等
-
marker:數據點的標記樣式,例如 'o'(圓形)、's'(方形)、'*'(星號)等。
-
alpha:線條的透明度,取值在 0 到 1 之間。
舉例:增加上面一些參數后,重新執行(設置顏色為黑色,線條為虛線,數據點為方形)
df.plot.line(title='line',x='name',y='math',grid=True,figsize=(4,3),color='black',linestyle='dashed',marker='s')
舉例:在折線圖上顯示數值
import?pandas?as?pd
import?matplotlib.pyplot?as?plt
# 創建示例數據
data = {'Year': [2015,?2016,?2017,?2018,?2019],
'Sales': [100,?150,?200,?180,?250]}
df = pd.DataFrame(data)
#繪制折線圖:xticks=df['Year']表示x軸的刻度跟Year這一列保持一致
ax = df.plot.line(x='Year', y='Sales',xticks=df['Year'])
# 遍歷數據點添加數值
for?x, y?in?zip(df['Year'], df['Sales']):plt.text(int(x), int(y), int(y))# 顯示圖形
plt.show()
程序執行后,結果如下:
柱狀圖:df.plot.bar()或df.plot(kind=bar)
設置x軸為name列,其他三列作為y軸,并通過colormap='viridis'設置柱子的漸變顏色
df.plot.bar(x='name',y=['math','english','yuwen'],colormap='viridis')
執行后結果如下:
colormap 常見的顏色如下:
-
viridis:從感知較均勻的顏色,從深藍色到黃色。
-
magma:從黑色到粉色到黃色的漸變。
-
plasma:從深紫色到黃色的漸變。
-
inferno:從黑色到橙色到黃色的漸變。
-
cividis:從感知上較均勻的顏色映射,對色盲比較友好。
-
Greys:灰度顏色映射。
-
Reds:從淺紅色到深紅色的漸變。
-
Blues:從淺藍色到深藍色的漸變。
-
Greens:從淺綠色到深綠色的漸變。
-
Oranges:從淺橙色到深橙色的漸變。
-
Purples:從淺紫色到深紫色的漸變。
除了開頭介紹的plot對象的參數外,df.plot.bar 常用的參數包括:
-
color:設置柱形的顏色,可以是單個顏色值或顏色列表。
-
width:柱形的寬度。
-
alpha:柱形的透明度,取值在 0 到 1 之間。
舉例:在柱狀圖上顯示數值
import?pandasaspd
importmatplotlib.pyplotasplt
# 創建示例數據
data={'Year':[2015,2016,2017,2018,2019],
'Sales':[100,150,200,180,250]}
df=pd.DataFrame(data)
# 繪制柱狀圖
ax=df.plot.bar(x='Year',y='Sales')
# 遍歷數據點添加數值
for p in ax.patches:
ax.annotate(str(p.get_height()),(p.get_x()+p.get_width()/2,p.get_height()),ha='center',va='center')
# 顯示圖形
plt.show()
程序執行后,結果如下:
水平柱狀圖:df.plot.barh()或df.plot(kind=barh)
設置subplots=True表示每一列使用一個子圖,設置x軸為name列
df.plot.barh(x='name',subplots=True)
執行后如下:
df.plot.bar h常用的參數包括跟df.plot.bar的參數一致,參考如上介紹。
直方圖:df.plot.hist()或者df.plot(kind=hist)
舉例:設置一個DataFrame數據,包含某個value項目的數據統計,通過直方圖展示。
import?pandas?as?pd
import?matplotlib.pyplot?as?plt
# 創建示例數據
data?= {'value': [12,?25,?30,?18,?22,?35,?40,?28,?15,?20]}
df = pd.DataFrame(data)
# 使用 pandas 繪制直方圖,配置一些其他參數:bins=3設置3個區間,color=green顏色設置為綠色,edgecolor='black'邊框為黑色,xlabel='value',ylabel='count'設置x軸和y軸的標簽。df['Value'].plot.hist(title='Histogram',bins=3, color='green', edgecolor='black',xlabel='value',ylabel='count')
# 顯示圖形
plt.show()
執行后結果如下:
除了開頭介紹的plot對象的參數外,df.plot.hist 常用的參數包括:
-
bins:指定直方圖的區間數量。可以是一個整數,表示等寬的區間數量;也可以是一個序列,指定每個區間的邊界。
-
color:直方圖的顏色。
-
edgecolor:直方圖邊框的顏色。
-
alpha:直方圖的透明度,取值在 0 到 1 之間。
-
grid:布爾值,決定是否顯示網格線。
-
density:若為 True,則直方圖的縱坐標顯示概率密度;若為 False(默認),則顯示頻數。
-
range:指定數據的范圍,以元組形式給出 (min, max) 。
-
histtype:直方圖的類型,比如 'bar'(默認,垂直條形)、'barstacked'(堆疊垂直條形)、'step'(階梯狀)、'stepfilled'(填充的階梯狀)?。
餅圖:df.plot.pie()或df.plot(kind=pie)
舉例:設置一個DataFrame數據,包含某個項目的子項目完成進度的個數統計,通過餅圖展示。
import?pandas?as?pd
import?matplotlib.pyplot?as?plt
# 創建示例數據
data = {'result': ['Not started','in progress','completed'],
'count':[5,10,8]}
df = pd.DataFrame(data)
# 使用 pandas 繪制餅圖
#將count列作為統計數據,標簽labels使用result列,
#autopct展示每個餅圖區域的百分比,%1.2f%表示保留2位小數
df.plot.pie(y='count',labels=df['result'],autopct='%1.2f%')
# 顯示圖形
plt.show()
運行后結果如下:
除了開頭介紹的plot對象的參數外,df.plot.pie一些 常用的參數包括:
-
y:指定用于繪制餅圖的數據列。
-
labels:指定每個扇區對應的標簽。
-
colors:指定扇區的顏色,可以是單個顏色值或顏色列表。
-
explode:設置扇區的偏移程度,通常是一個與數據長度相同的小數列表,用于突出顯示某些扇區。
-
shadow:布爾值,決定是否添加陰影效果,使餅圖更具立體感。
-
startangle:指定起始角度,默認為 0 度,從 x 軸正方向開始。
-
autopct:用于在扇區上顯示百分比格式的數值,例如 '%1.1f%%' 表示保留一位小數的百分比。
-
radius:設置餅圖的半徑大小。
面積圖:df.plot.area()或df.plot(kind=area)
舉例:設置一個DataFrame數據,表示某個項目的子項目完成進度的個數統計,通過面積圖展示。
import?pandas?as?pd
import?matplotlib.pyplot?as?plt
# 創建示例數據
data = {'result': ['Not started','in progress','completed'],
'count':[5,10,8]}
df = pd.DataFrame(data)
# 使用 pandas 繪制面積圖
#將count列作為y軸,result列作為x軸
df.plot.area(x='result',y='count',stacked=False,color='blue')# 顯示圖形
plt.show()
運行后結果如下:
除了開頭介紹的plot對象的參數外,df.plot.area 用于繪制面積圖,以下是一些常用參數:
-
stacked:布爾值,決定是否堆疊面積。如果為 True,則各區域會堆疊顯示;如果為 False,則區域會相互覆蓋。
-
color:指定圖形的顏色,可以是單個顏色值或顏色列表。
-
alpha:設置圖形的透明度,取值在 0(完全透明)到 1(完全不透明)之間。
散點圖:df.plot.scatter()或df.plot(kind=scatter)
舉例:設置一個DataFrame數據,包含x軸和y軸的一些數字,通過散點圖展示。
import?pandas?as?pd
import?matplotlib.pyplot?as?plt
# 創建示例數據
data = {'X': [1,?2,?3,?4,?5],
'Y': [2,?4,?6,?8,?10],
'Size': [100,?200,?150,?300,?250],
'Color': ['red',?'blue',?'green',?'yellow',?'purple']}
df = pd.DataFrame(data)
# 繪制散點圖
df.plot.scatter(x='X', y='Y', s=df['Size'],?c=df['Color'], marker='o', alpha=0.7)
# 顯示圖形
plt.show()
運行后結果如下:
除了開頭介紹的plot對象的參數外,df.plot.scatter 常用的參數包括:
-
s:控制點的大小,可以是一個固定值或者一個與數據長度相同的數組來為每個點設置不同的大小。
-
c:控制點的顏色,可以是一個固定的顏色值,也可以是一個與數據長度相同的數組來為每個點設置不同的顏色。
-
marker:點的標記樣式,例如 'o'(圓形)、's'(方形)、'*'(星號)等。
-
alpha:點的透明度,取值在 0(完全透明)到 1(完全不透明)之間。
-
edgecolors:點的邊緣顏色。
-
linewidths:點的邊緣線寬。
箱型圖:df.plot.box()或df.plot(kind=box)
舉例:設置一個DataFrame數據,表示股票在K線圖中的最高價(High Price)、最低價(Low Price)、收盤價(Close Price)和開盤價(Open Price),通過箱體圖展示。
import?pandas?as?pd
import?matplotlib.pyplot?as?plt
# 創建示例數據
data = {'type': ['High Price','Open Price','Low Price','Close Price'],'price':[10.22,9.99,9.78,10.10]}df = pd.DataFrame(data)
# 使用 pandas 繪制箱體圖
#將'price'列作為y軸
df.plot.box(column='price')# 顯示圖形
plt.show()
運行后結果如下:
除了開頭介紹的plot對象的參數外,df.plot.box 的一些常用參數:
-
column:指定要繪制箱線圖的數據列名。
-
by:用于分組的列名,以便為不同的組繪制單獨的箱線圖。
-
color:箱線圖的顏色。
-
sym:異常值的標記樣式。
-
vert:布爾值,決定箱線圖是垂直繪制(True,默認)還是水平繪制(False)。
-
widths:箱線圖的寬度。
-
notch:布爾值,如果為 True,則繪制帶缺口的箱線圖。
-
patch_artist:布爾值,如果為 True,則用填充的方式繪制箱體。
六邊形箱體圖:df.plot.hexbin()或df.plot(kind=hexbin)
舉例:設置一個DataFrame數據,隨機生成數量一致的x軸和y軸的數據,通過六邊形箱體圖展示。
import?pandas?as?pd
import?matplotlib.pyplot?as?plt
import?random
# 創建示例數據
x = [random.randint(0,100)?for?i?in?range(20)]
y = [random.randint(0,100)?for?i?in?range(20)]
df = pd.DataFrame({'X': x,?'Y': y})
# 繪制六邊形箱體圖
df.plot.hexbin(x='X', y='Y', gridsize=20, color='k')
# 顯示圖形
plt.show()
運行后結果如下:
除了開頭介紹的plot對象的參數外,df.plot.hexbin 用于繪制六邊形分箱圖。以下是一些常用參數:
-
gridsize:控制六邊形網格的大小。較小的值會產生更多、更精細的六邊形。
-
C:可以指定與每個點相關的值,用于給六邊形著色。
-
reduce_C_function:用于聚合 C 值的函數,例如 np.mean(默認)、np.sum 等。
-
mincnt:六邊形中包含的最小點數,少于這個點數的六邊形不會被繪制。
-
xscale、yscale:控制 X 軸和 Y 軸的縮放,例如 'linear'(默認)、'log' 等。
-
color:六邊形的顏色。
-
cmap:顏色映射(Color Map),用于根據 C 值進行顏色映射。
大家注意了,以上圖表暫不支持中文(中文會有亂碼),如果需要中文可能要再繼續探索下了。
共勉: 東漢·班固《漢書·枚乘傳》:“泰山之管穿石,單極之綆斷干。水非石之鉆,索非木之鋸,漸靡使之然也。”
-----指水滴不斷地滴,可以滴穿石頭;
-----比喻堅持不懈,集細微的力量也能成就難能的功勞。
----感謝讀者的閱讀和學習,謝謝大家。