關于Pathon的繪圖庫的認識和基本操作的學習 這里學習了兩款常用便捷的繪圖庫去學習使用
Matplotlib
介紹
是最受歡迎的一種數據可視化包 是常用的2D繪圖庫 一般常于Numpy和Pandas使用 是數據分析中非常重要的工具
可以自定義XY軸 繪制線形圖 柱狀圖 直方圖 密度圖 散點圖 更清晰的展示數據
?基本繪圖
x x 為繪制做坐標點 ls 為線型linestyle lw為線寬linewidth lable為標簽文本內容 color為顏色 marker為標記
ls | - 實線? : 點虛線? --破折線? -.點劃線 |
color | r 紅 g 綠 y 黃 k 黑 w 白 |
marker | . 點? ,像素點 o 實心圓 v 下三角 * 星星 |
# 繪制直線圖
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [2,4,6,8,10]
plt.plot(x,y,color="r",ls="--")
plt.show()
使用
設置網格
import numpy as np # 設置網格
plt.figure(figsize=(6,3),dpi=100)
x = np.linspace(0,2*np.pi)
y = np.sin(x)
plt.plot(x,y)
plt.grid() # 設置網格
繪制多線
import numpy as py # 繪制多條線 設置畫布背景
plt.figure(figsize=(6,3),dpi=100) # 設置畫布的長寬和分辨率
x = np.linspace(0,2*np.pi)
y = np.sin(x)
z = np.cos(x)
plt.plot(x,y)
# plt.show() # 立刻繪圖 只繪制xy的圖像
plt.plot(x,z)
# 創建數據
x = np.linspace(0,10,100)
y1 = np.sin(x)
y2 = np.cos(x)# 繪制圖形
plt.plot(x,y1,label='Sin Function',color="y",ls="-.") # 第一個數據系列
plt.plot(x,y2,label='Cos Function')# 顯示圖例
plt.legend()# 顯示圖形
plt.show()
?多圖布局
#%%
%matplotlib inline
# 若不顯示圖片 則加上
import matplotlib.pyplot as plt
plt.rcParams['front.sans-serif'] = ['SimHei'] # 用于正常顯示中文標簽
plt.rcParams['axes.unicode_minus'] = False # 用于正常顯示負號
#%%
# 繪制直線圖
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [2,4,6,8,10]
plt.plot(x,y,color="r",ls="--")
plt.show()
#%%
import numpy as np # 設置網格
plt.figure(figsize=(6,3),dpi=100)
x = np.linspace(0,2*np.pi)
y = np.sin(x)
plt.plot(x,y)
plt.grid() # 設置網格
#%%
import numpy as py # 繪制多條線 設置畫布背景
plt.figure(figsize=(6,3),dpi=100) # 設置畫布的長寬和分辨率
x = np.linspace(0,2*np.pi)
y = np.sin(x)
z = np.cos(x)
plt.plot(x,y)
# plt.show() # 立刻繪圖
plt.plot(x,z)
#%%
# 多圖布局
import matplotlib.pyplot as plt
import numpy as np# 創建數據
x = np.linspace(0,10,100)
y1 = np.sin(x)
y2 = np.cos(x)# 創建一個2*2的子圖布局
plt.figure(figsize=(10,6)) # 設置整個圖的大小# 第一個子圖
plt.subplot(2,2,1) # 第一個子圖位于2*2布局的第一個位置
plt.plot(x,y1,'r-') # 繪制曲線
plt.title('Sin Function') # 設置標題# 第二個子圖
plt.subplot(2,2,2) # 第二個子圖的第二個位置
plt.plot(x,y2,'b-') # 設置cos曲線
plt.title('Cos Function')# 第三個子圖
plt.subplot(2,2,3)
plt.plot(x,y1 + y2,'h-')
plt.title('Sin + Cos Function')# 第四個子圖
plt.subplot(2,2,4)
plt.plot(x,y1 - y2,'r-')
plt.title('Sin - Cos Function')# 調整子圖之間的間距
plt.tight_layout()# 顯示圖形
plt.show()
圖形嵌套
# 圖形嵌套
import numpy as np
import matplotlib.pyplot as plt# 創建數據
x = np.linspace(0,10,100)
y = np.sin(x)# 創建外層圖形
fig = plt.figure(figsize=(8,6))# 在外層圖形中創建嵌套的子圖
plt.plot(x,y,'b-')
plt.title('Main Plot')# 創建嵌套的子圖
left,bottom, width,height = [0.4,0.5,0.25,0.25]
axes = fig.add_axes([left,bottom,width,height]) # 創建一個新的坐標軸
axes.plot(x,y,'r-',label = 'sin Function (Inset)')
plt.title('Inset Plot')# 顯示圖例
plt.legend()# 顯示圖形
plt.show()
調整刻度和標簽
import numpy as np
import matplotlib.pyplot as plt# 創建數據
x = np.linspace(0,10,100)
y = np.sin(x)# 繪制圖形
plt.plot(x,y,label = 'Sin Function')
plt.title('修改刻度')# 修改X軸和Y軸的刻度
plt.xticks(np.arange(0,11,1)) # 設置刻度和步長
plt.yticks([-1,0,1])# 添加標簽
plt.xlabel('x')
plt.ylabel('y')plt.legend()
plt.show()
?保存圖片
import numpy as np
import matplotlib.pyplot as pltx = np.linspace(0,10,100)
y = np.sin(x)plt.plot(x,y,label = 'Sin Function')# 標簽
plt.title('Plot Example')
plt.xticks(np.arange(0,11,1))
plt.yticks([-1,0,1])
plt.legend()plt.savefig('plot_example.png')
plt.show()
繪制折線圖
plt.figure(figsize=(10,6))x = df.index # 獲取月份作為x軸數據
y1 = df['語文']plt.plot(x,y1,marker='o',color='r',ls='--',label='語文')plt.title('張三成績月變化情況')
plt.xlabel('月份')
plt.ylabel('分數')
plt.legend()
plt.grid(True) # 網格線plt.xticks(rotation = 45) # x軸刻度標簽的角度旋轉為45度
plt.tight_layout()
plt.show()
多個柱狀圖
# 繪制多個柱狀圖
import numpy as np
import matplotlib.pyplot as plt# 讀取 Excel 表格數據
excel_file = '張三成績.xlsx'
df = pd.read_excel(excel_file)# 繪制圖像
plt.figure(figsize=(10,6))months = df.index
x = range(len(months))# 設置柱狀圖的寬度
bar_width = 0.25plt.bar(x,df['語文'],width=bar_width,align='center',label='語文',color='skyblue')
plt.bar([i + bar_width for i in x],df['英語'],width=bar_width,align='center',label='數學',color='r')
plt.bar([i + 2 * bar_width for i in x],df['英語'],width=bar_width,align='center',color='b')plt.title('成績月變化情況')
plt.xlabel('月份')
plt.ylabel('分數')# 設置X軸刻度標簽
plt.legend()# 顯示圖形
plt.tight_layout()
plt.show()
繪制散點圖
import numpy as np
import matplotlib.pyplot as pltnp.random.seed(0)
height = np.random.normal(loc=170,scale=10, size=100)
weight = 0.6 * height + np.random.normal(loc=0,scale=5,size=100)plt.figure(figsize=(10,6))
plt.scatter(height,weight,color='r',alpha=0.7)plt.title('身高與體重關系散點圖')
plt.xlabel('身高')
plt.ylabel('體重')plt.grid(True)
plt.tight_layout()
plt.show()
繪制餅圖
import numpy as np
import matplotlib.pyplot as pltexcel_file = '張三成績.xlsx'
df = pd.read_excel(excel_file)plt.figure(figsize=(10,6))plt.pie(df['語文'],startangle=90) # startangle 繪制的起始位置plt.title('成績情況')plt.show()
Search
介紹
? ? 在Matplotlib的基礎上進行了更高級的封裝 使用極簡的代碼做出具有分析價值且十分美觀的圖形 而且也支持Pyhon的其他庫?
? ? 可以繪制 折線圖 散點圖(分類圖)分類分布圖 分類統計圖 線性回歸圖 熱力圖
風格設置
white | 純白? |
whitegrid | 帶有網格的純白 |
dark | 灰色 |
darkgrid | 帶網格灰色 |
ticks | 白色 軸上有刻度條? |
函數參數使用
函數類型 | 函數名稱 | 主要參數 | 使用場景 | 示例代碼 |
---|---|---|---|---|
??分布類?? | displot() (通用分布圖) | kind : 指定類型(hist/kde/ecdf)data : 數據集x/y : 變量hue : 分組變量rug : 顯示分布密度 | 單變量分布分析 數據分布形狀探索 | sns.displot(data=tips, x="total_bill", kind="kde", hue="time") |
??分布類?? | histplot() (直方圖) | bins : 箱數kde : 疊加密度線stat : 統計方式(count/density)multiple : 分組疊放方式 | 數值變量分布探索 統計頻次分析 | sns.histplot(data=tips, x="tip", bins=20, kde=True, hue="sex") |
??關系類?? | scatterplot() (散點圖) | x/y : 變量坐標size : 點大小style : 點形狀alpha : 透明度palette : 色板 | 雙變量關系探索 相關性可視化 | sns.scatterplot(data=iris, x="sepal_length", y="petal_length", hue="species", size="petal_width") |
??關系類?? | lineplot() (折線圖) | sort : 是否排序markers : 顯示標記ci : 置信區間style : 線型分組 | 時間趨勢分析 序列變化對比 | sns.lineplot(data=flights, x="year", y="passengers", hue="month", ci=None) |
??分類類?? | barplot() (條形圖) | estimator : 聚合函數(mean/sum)ci : 置信區間order : 類目順序capsize : 誤差線帽寬 | 分類變量聚合比較 均值差異分析 | sns.barplot(data=titanic, x="class", y="fare", hue="sex", estimator=np.mean) |
??分類類?? | boxplot() (箱線圖) | orient : 方向(v/h)notch : 凹口fliersize : 離群點大小width : 寬度 | 數據分布對比 異常值檢測 | sns.boxplot(data=penguins, x="species", y="body_mass_g", hue="sex", notch=True) |
??分類類?? | violinplot() (小提琴圖) | inner : 內部圖(quartiles/stick)split : 分組合并bw : 核密度帶寬 | 比較數據分布形狀 概率密度可視化 | sns.violinplot(data=penguins, x="island", y="bill_length", hue="sex", inner="stick", split=True) |
??矩陣類?? | heatmap() (熱力圖) | annot : 顯示數值fmt : 數值格式cbar : 顯示色標linewidths : 網格線寬vmin/vmax : 值域范圍 | 相關性分析 交叉表可視化 | sns.heatmap(data=corr_matrix, annot=True, fmt=".2f", cmap="coolwarm") |
??矩陣類?? | clustermap() (聚類熱力圖) | row_colors : 行標簽色method : 聚類方法metric : 距離算法z_score : 標準化 | 聚類分析 分組可視化 | sns.clustermap(data=iris, method="ward", z_score=0, cmap="viridis") |
??網格類?? | FacetGrid() (分面網格) | col/row : 分面維度col_wrap : 換行數height/aspect : 子圖尺寸share{x/y} : 坐標軸共享 | 多維度分析 數據集子集探索 | g = sns.FacetGrid(tips, col="time", row="smoker")<br>g.map(sns.scatterplot, "total_bill", "tip") |
??網格類?? | pairplot() (變量關系矩陣) | diag_kind : 對角線圖類型plot_kws : 子圖參數corner : 只顯示下三角kind : 關系類型(scatter/kde) | 多變量關系探索 數據集快速概覽 | sns.pairplot(data=iris, hue="species", diag_kind="hist", corner=True) |
核心參數
參數 | 描述 | 示例值 |
---|---|---|
data | 輸入數據源 | DataFrame/tables/arrays |
x/y | 坐標軸變量 | 列名 (如:"total_bill") |
hue | 分組變量 | 分類列名 (如:"sex") |
palette | 調色板 | "viridis", "mako", "Set2" |
size | 尺寸變量 | 連續變量列名 |
alpha | 透明度 | 0-1值 (0.5表示半透明) |
legend | 圖例 | "auto"(默認)/True/False |
ax | matplotlib軸對象 | 用于在已有圖形上繪制 |
使用
折線圖(使用庫自帶的測試數據集)
import seaborn as sns
test_data = sns.load_dataset('fmri')
print(test_data.head())sns.relplot(x="timepoint",y="signal",kind="line",data=test_data)
折線圖(事件區分)
import seaborn as sns
test_data = sns.load_dataset('fmri')
print(test_data.head())sns.relplot(x="timepoint",y="signal",kind="line",hue="event",data=test_data)
分圖展示
import seaborn as sns
test_data = sns.load_dataset('fmri')
print(test_data.head())sns.relplot(x="timepoint",y="signal",kind="line",hue="event",col="event",data=test_data)
散點圖(分類圖)
titanic = sns.load_dataset('titanic')
sns.relplot(x="age",y="fare",data=titanic)
sns.catplot(x="pclass",y="fare",data=titanic) # 用作做分類
箱形圖
sns.boxplot(x="pclass",y="fare",data=titanic)
條形圖
sns.barplot(x="pclass",y="fare",data=titanic) # 條形圖
計數圖
sns.countplot(x="pclass",data=titanic)
sns.set_style("whitegrid") # 繪圖風格設置
調色板
# 調色板
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于正常顯示中文標簽
plt.rcParams['axes.unicode_minus'] = False # 用于正常顯示負號
plt.figure(figsize=(10,10))
planets = sns.load_dataset('planets')
sns.barplot(x="year",y="number",data=planets,palette="rainbow")
?線性關系圖
sns.regplot(x="age",y="fare",data=titanic)
熱力圖
# 熱力圖
flights = sns.load_dataset('flights')# 將長格式轉換為寬格式數據,以便于繪制熱力圖
f = flights.pivot(index="month",columns="year",values="passengers")# 繪制熱力圖
plt.figure(figsize=(10,10))
sns.heatmap(f,annot=True,fmt='d',cmap='YlGnBu')
plt.title("Flights Passenger Count By Year ans Month")
plt.xlabel("Year")
plt.ylabel("Month")
plt.show()
相關系數矩陣的熱力圖
plt.figure(figsize=(10,10))
sns.heatmap(f.corr(),annot=True,cmap='coolwarm')
學習時間? 2025.07.20