绘图库 Matplotlib Search
关于Pathon的绘图库的认识和基本操作的学习 这里学习了两款常用便捷的绘图库去学习使用
Matplotlib
介绍
是最受欢迎的一种数据可视化包 是常用的2D绘图库 一般常于Numpy和Pandas使用 是数据分析中非常重要的工具
可以自定义XY轴 绘制线形图 柱状图 直方图 密度图 散点图 更清晰的展示数据
基本绘图
x x 为绘制做坐标点 ls 为线型linestyle lw为线宽linewidth lable为标签文本内容 color为颜色 marker为标记
# 绘制直线图import matplotlib.pyplot as pltx = [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 pltplt.rcParams[\'front.sans-serif\'] = [\'SimHei\'] # 用于正常显示中文标签plt.rcParams[\'axes.unicode_minus\'] = False # 用于正常显示负号#%%# 绘制直线图import matplotlib.pyplot as pltx = [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 pltimport 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 npimport 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 npimport 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 npimport 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 npimport matplotlib.pyplot as plt# 读取 Excel 表格数据excel_file = \'张三成绩.xlsx\'df = pd.read_excel(excel_file)# 绘制图像plt.figure(figsize=(10,6))months = df.indexx = 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 npimport 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 npimport 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
函数参数使用
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\")
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
x/y
hue
palette
size
alpha
legend
ax
使用
折线图(使用库自带的测试数据集)
import seaborn as snstest_data = sns.load_dataset(\'fmri\')print(test_data.head())sns.relplot(x=\"timepoint\",y=\"signal\",kind=\"line\",data=test_data)
折线图(事件区分)
import seaborn as snstest_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 snstest_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 pltplt.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