✒️ 4、添加图形标题
1️⃣ 4.1 添加英文标题
- plot.title(label, fontdict=None,loc= ‘ center ‘, pad=None,**kwargs)
字段 | 数据类型 | 含义 |
label | str | 所需要设置标题的文本字符串 |
fontdict | dict | 设置文本的大小、外观等,默认为fontdict = {‘ fontsize ‘: rcParams[‘ axes.titlesize ‘],“fontweight”:rcParams(“轴# @titleweight”),“verticalalignment”:“基线”,“horizontalalignment”:loc} |
loc | str | 设置哦标题的位置 |
pad | float | 指的是标题从轴的顶端到顶点的偏移量,单位为点。它的默认值为None |
**kwargs | - | 指的是使用其他关键字参数作为文本属性,如颜色、fonstyle、行间距、背景色、旋转等 |
plt.title(u'Normal Distribution Density Curve', fontsize = 12) ——标题名称为Normal Distribution Density Curve,fontsize = 12 设置的是字体的大小为12
# 1.图形的大小,(宽度,高度)
plt.figure(figsize = (8, 6))
# 2.绘制三条密度曲线
plt.plot(x_values, y1, 'green', label = r'$\mathcal{N}(0, 1)$') ## 这里的'$\mathcal{N}(0, 1)$ 中$\mathcal{N}$ 表示的是高斯分布,采用花样字体显示
plt.plot(x_values, y2, 'blue', label = r'$\mathcal{N}(0, 0.2)$') ## \mathcal 表示花样字体
plt.plot(x_values, y3, 'orange', label = r'$\mathcal{N}(-3, 0.5)$')
# 3.指定刻度
plt.yticks(np.arange(0, 1.1, 0.1)) ## 表示Y轴刻度的起始点为0,终点为1.1(不包括1.1),步长为0.1
plt.xticks(np.arange(-6, 7, 1)) ## 表示X轴刻度的起始点为-6,终点为7(不包括7),步长为1
# 4.解决第一个问题
plt.xlim(-6, 6) # 可以理解为严格按设定的长度来显示x轴的作图范围
plt.ylim(0, 1) # 可以理解为严格按设定的长度来显示y轴的作图范围
# 5.解决第二个问题
plt.tick_params(top = True, right = True, direction = 'in') # direction : 'in'、'out'、'inout',分别代表刻度线显示在绘图区内侧、外侧以及同时显示
# 6.添加参数rotation,解决第三个问题
plt.xlabel(r'$x$')
plt.ylabel(r'$f(x)$', rotation = 0 , labelpad = 15)
# 7.添加标题
plt.title(u'Normal Distribution Density Curve', fontsize = 12) # fontsize : 设置的是字体的大小
# 8.添加图例
plt.legend()
# 9.显示图形
plt.show()
2️⃣ 4.2 添加中文标题
- 添加中文标题需要特别注意一个问题:所采用的字体,是否已经下载对应的字体包,若无,则会报错
- 可采用下面的方法来下载字体包
plt.rcParams['font.family'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 1.导入需要的模块
from matplotlib.font_manager import FontProperties
# 2.构建字体
# custom_font = FontProperties(fname = './input/KaiTi_GB2312.ttf')
plt.rcParams['font.family'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 3.图形的大小,(宽度,高度)
plt.figure(figsize = (8, 6))
# 4.绘制三条密度曲线
plt.plot(x_values, y1, 'green', label = r'$\mathcal{N}(0, 1)$') ## 这里的'$\mathcal{N}(0, 1)$ 中$\mathcal{N}$ 表示的是高斯分布,采用花样字体显示
plt.plot(x_values, y2, 'blue', label = r'$\mathcal{N}(0, 0.2)$') ## \mathcal 表示花样字体
plt.plot(x_values, y3, 'orange', label = r'$\mathcal{N}(-3, 0.5)$')
# 5.指定刻度
plt.yticks(np.arange(0, 1.1, 0.1)) ## 表示Y轴刻度的起始点为0,终点为1.1(不包括1.1),步长为0.1
plt.xticks(np.arange(-6, 7, 1)) ## 表示X轴刻度的起始点为-6,终点为7(不包括7),步长为1
# 6.解决第一个问题
plt.xlim(-6, 6) # 可以理解为严格按设定的长度来显示x轴的作图范围
plt.ylim(0, 1) # 可以理解为严格按设定的长度来显示y轴的作图范围
# 7.解决第二个问题
plt.tick_params(top = True, right = True, direction = 'in') # direction : 'in'、'out'、'inout',分别代表刻度线显示在绘图区内侧、外侧以及同时显示
# 8.添加参数rotation,解决第三个问题
plt.xlabel(r'$x$')
plt.ylabel(r'$f(x)$', rotation = 0 , labelpad = 15)
# 9.添加图例
plt.legend()
# 10.添加标题
# plt.title(u'正态分布密度曲线', fontproperties = custom_font, fontsize = 12) # fontsize : 设置的是字体的大小
plt.title(u'正态分布密度曲线',fontsize = 15)
# 11.显示图形
plt.show()
📔 5、使用Matplotlib 绘制子图
- 把上图中的三条曲线,放在两幅并列的图形中。左边的子图绘制橙色和绿色的曲线,右边的子图绘制蓝色曲线、
📍 plot.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
字段 | 数据类型 | 含义 |
nrows | int | 子图的行数 |
ncols | int | 子图的列数 |
sharex, sharey | str | 控制 x 或 y 轴是否应该共享。'none' 或 False 表示不共享,'all' 表示所有子图共享,'row' 表示每行共享,'col' 表示每列共享 |
figsize | float | 图形窗口的尺寸(宽度,高度),单位是英寸 |
dpi | float | 图形窗口的分辨率,每英寸的点数 |
gridspec_kw | dict | 用于创建GridSpec的参数,GridSpec可以控制子图的位置和大小 |
**fig_kw | dict | 额外的关键字参数传递给Figure构造函数 |
squeeze | bool | 如果True,则删除一维的条目,使得返回的数组更加紧凑 |
subplot_kw | dict | 传递给add_subplot 或subplot的关键字参数 |
grid | bool | 是否显示网格线 |
**axes_kw | dict | 传递给add_axes的关键字参数 |
plt.subplot(1,2,1) —— 表示将绘图的窗口分成1行两列,将图画在第一个位置
📍 plot.grid(b,which, axis,color,linestyle,linewidth,\\kwargs)
字段 | 数据类型 | 含义 |
b | bool | 设置是否显示网格线,True |
which | str | 用于指定在哪个轴上显示网格线。可能的值有'major'(仅主刻度)、'minorr'(仅次刻度)或'both'(主刻度和次刻度) |
axis | str | 用于指定网格线显示的轴。可以是‘x’,‘y’,‘both’ |
color | str | 设置网格的颜色 |
linestyle | str | 用于设置网格线的线型 |
linewidth | float 或 int | 用于设置网格线的线宽 |
plt.grid() —— 表示图内是否显示网格线,1=True:表示显示网格线,0=Flase:表示不显示 ,默 认值是显示
📍 plot.tight_layout(pad,h_pad,w_pad,rect)
字段 | 数据类型 | 含义 |
pad | float | 控制子图之间的填充量 |
h_pad | float | 控制子图之间的水平填充量 |
w_pad | float | 控制子图之间的垂直填充量 |
rect | float | 定义子图应该填充的矩形区域,其坐标是相对于图形窗口 |
plt.tight_layout() —— 自动调整布局,它仅仅检查坐标轴标签、刻度标签以及标题的部分是否需 要调整
📍 plot.suptitle (t,x,y, horizontalalignment ,verticalalignment,fontsize,fontweight,* * kwargs)
字段 | 数据类型 | 含义 |
t | str | 设置标题的文本 |
x | float | 标题的水平位置,相对于图形宽度的比例。默认值为 0.5,即居中 |
y | float | 标题的垂直位置,相对于图形高度的比例。默认值通常根据其他参数自动计算,但也可以通过设置来手动调整 |
horizontalalignment(ha) | str | 水平对齐方式,可以是 'center', 'left', 'right' 等.默认值为 'center' |
verticalalignment(va) | str | 垂直对齐方式,可以是 'center', 'top', 'bottom', 'baseline' 等。默认值为 'top' |
fontsize | int 或 float | 标题的字体大小,可以是具体的数值(整数或浮点数),也可以是字符串表示的相对大小 |
fontweight | str 或 int | 字体粗细。可以是字符串(如 'normal', 'bold')或数字(如 100, 200, ...),默认值是 'bold' |
plt.suptitle(u'绘制子图展示正态分布密度曲线') —— 设置图形的子标题
# 1.设置绘图窗口
plt.figure(figsize = (10, 5))
# 2.表示将绘图的窗口分成1行两列,将图画在第一个位置
plt.subplot(1,2,1)
# 3.绘制密度曲线
plt.plot(x_values, y1, 'green', label=r'$\mathbb{N}(0, 1)$')
plt.plot(x_values, y3, 'orange', label=r'$\mathbb{N}(-3, 0.5)$')
# 4.指定刻度
plt.yticks(np.arange(0, 1.1, 0.1))
plt.xticks(np.arange(-6, 7, 1))
# 5.解决第二个问题
plt.xlabel(r'$x$')
plt.ylabel(r'$f(x)$', rotation = 0, labelpad = 15)
# 6.显示图例
plt.legend()
# 7.设置标题
# plt.title(u'正态分布密度曲线', fontproperties = custom_font, fontsize = 10)
plt.title(u'正态分布密度曲线', fontsize = 10)
# 8.表示将绘图的窗口分成1行两列,将图画在第二个位置
plt.subplot(1,2,2)
# 9.绘制密度曲线
plt.plot(x_values, y2, 'blue', label=r'$\mathbb{N}(0, 0.2)$')
# 10.表示图内是否显示网格线,1=True:表示显示网格线,0=Flase:表示不显示 ,默认值是显示
plt.grid()
# 11.自动调整两幅子图的布局
plt.tight_layout() # 它仅仅检查坐标轴标签、刻度标签以及标题的部分是否需要调整
# 12.添加整幅图形的标题
# plt.suptitle(u'绘制子图展示正态分布密度曲线', fontproperties = custom_font)
plt.suptitle(u'绘制子图展示正态分布密度曲线')
# 13.显示图形
plt.show()
🔎 6、使用Matplotlib绘制热力图
1️⃣ 6.1 加载数据集
- 数据集是NBA运动员的比赛统计数据,部分数据如下图所示:
# 1.导入库 import pandas as pd # 2.读取数据 score = pd.read_csv('C:/Users/86135/Documents/mycrawlers/数据分析与可视化/实验四——NBA数据分析/NBAPlayers2015.csv', index_col = 0) # 3.查看数据 score.head()
2️⃣ 6.2 标准化数据集
# 1.标准化的公式
score = (score - score.min())/(score.max() - score.min())
# 2.查看数据
score.head()
3️⃣ 6.3 绘制图形
📍 Axes.pcolormesh(C,X,Y,cmap,norm,vmin,vmax,alpha,shading,edgecolors)
字段 | 数据类型 | 含义 |
C | float | 这个参数包含要进行颜色映射的2D数组中的值 |
X,Y | float | 这些参数是四边形角的坐标。它们通常是 NumPy 的二维数组,每个数组的形状为(m+1,n+1)或(m,n),其中m和n是网格的行数和列数 |
cmap | str | 这个参数是一个 colormap 实例或注册的 colormap 名称 |
norm | Normalize 类的实例 | 这是一个 Normalize 实例,用于将数据值缩放到规范的colormap ,范围 [0, 1] |
vmin, vmax | float | 这些参数定义了颜色条的范围 |
alpha | float | 这个参数控制颜色的透明度,范围通常为 [0, 1] |
shading | str | 这个参数控制网格的填充样式,可以是 'flat' 或 'gouraud' |
edgecolors | str 或 颜色序列或 None | 这个参数定义了边缘的颜色 |
heatmap = ax.pcolormesh(score, cmap = plt.cm.Blues, alpha = 0.7) 设置热力图,含义如下:
# score = data 传入数据
# cmap:matplotlib 颜色条名称或者对象,或者是颜色列表
# cmap = plt.cm.Blues : 表示两个相近蓝色的输出
# alpha :表示透明度
📍 fig.colorbar(mappable, cax=None, ax=None, **kw)
字段 | 数据类型 | 含义 |
mappable | ScalarMappable对象 | 必须提供的参数,通过contourf、pcolormesh 或imshow等函数返回的绘图对象。这个对象包含了数据与颜色之间的映射关系(即 colormap 和 normalization 信息) |
cax | - | 允许你指定一个已经存在的轴(axes)作为颜色条的位置。如果没有提供cax,颜色条将作为一个新的轴添加到图形中 |
ax | - | 允许你指定颜色条应该依附于哪个现有的轴。当提供了ax参数时,颜色条会自动从这个轴中“借用”一部分空间作为自己的空间 |
orientation | str | 控制颜色条的朝向,默认为垂直方向。也可以设置为 'horizontal',使颜色条水平放置 |
extend | str | 用于在颜色条的两端额外标出 normalization 范围外的颜色。可选值包括 'both'(两端都显示)、'max'(仅在数值大的那端显示)、'min'(仅在数值小的那端显示) |
shrink | float | 缩放颜色条,从 0 到 1 的值将决定颜色条的缩放比例 |
pad | float | 控制颜色条与子图之间的间距 |
ticks | 序列或 Locator 对象 | 指定颜色条上的刻度位置 |
format | float | 控制颜色条上刻度的格式,例如设置为 '%.2f' 可以保留两位小数 |
label | str | 为颜色条添加一个标签 |
fig.colorbar(heatmap) —— 表示绘制热力图
📍 ax.xaxis.tick_top() —— 将 X 轴的刻度标签移动到了坐标轴的顶部。这样,如果 Y 轴上的刻度标签很长,或者如果 Y 轴有多层标签,这可以帮助避免重叠和混淆。
📍 ax.invert_yaxis() —— 设置y轴反向
📍 ax.tick_params(axis,which,direction,length,width,color,pad,labelsize,labelcolor,...)
字段 | 数据类型 | 含义 |
axis | str | 可以是’x','y','both',或者是这些字符串的列表,用于指定设置哪些轴的刻度参数 |
which | str | 用于指定设置主刻度('major')、副刻度('minor')还是两者都设置('both') |
direction | str | 可以是'in','out','inout',用于设置刻度标签的方向 |
length | float | 用于设置刻度线的长度 |
width | float | 用于设置刻度线的宽度 |
color | str | 用于设置刻度线和刻度标签的颜色 |
pad | float | 用于设置刻度标签与轴线之间的距离 |
labelsize | float 或 str | 用于设置刻度标签的字体大小 |
labelcolor | str | 用于设置刻度标签的颜色 |
📍 在 Matplotlib 中,ax.spines是一个字典,它包含了坐标轴的四条“脊线”(spine lines),分别是'top','bottom','left'和'right'。这些脊线通常与坐标轴的边界重合,用于指示坐标轴的边界。代码 for item in ax.spines.values(): item.set_visible(False)
的作用是遍历ax.spines字典中的所有脊线对象,并将它们的可见性设置为False,即隐藏它们。
# 1.表示将绘图的窗口分成1行1列
fig, ax = plt.subplots(1, 1, figsize = (13, 13))
# 2.设置热力图的相关参数
heatmap = ax.pcolormesh(score, cmap = plt.cm.Blues, alpha = 0.7)
# 画热力图
# data = score
# cmap:matplotlib 颜色条名称或者对象,或者是颜色列表
# cmap = plt.cm.Blues : 表示两个相近蓝色的输出
# alpha :表示透明度
# 3.绘制热力图
fig.colorbar(heatmap)
# 4.设置坐标轴
ax.set_xticks(np.arange(23) + 0.5, minor = False) # 设置横坐标
ax.set_yticks(np.arange(182) + 0.5, minor = False) # 设置纵坐标
# 5.设置坐标轴的标签
ax.set_xticklabels(score.columns, minor = False, rotation = 30) # 设置横坐标的标签
ax.set_yticklabels(score.index, minor = False, rotation = 45) # 设置纵坐标的标签
# 6.将 X 轴的刻度标签移动到了坐标轴的顶部
ax.xaxis.tick_top()
# 7.设置y轴反向
ax.invert_yaxis()
# 8.设置坐标轴
ax.tick_params(left = False, top = False)
# 9.轴线设置
for item in ax.spines.values():
item.set_visible(False)
# 10.显示图形
plt.show()
🗞️ 7. 使用Seaborn绘制热力图
📍 seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None, robust=False, annot=None, fmt='.2g', annot_kws=None, linewidths=0, linecolor='white', cbar=True, cbar_kws=None, cbar_ax=None, square=False, xticklabels='auto', yticklabels='auto', mask=None, ax=None, **kwargs)
字段 | 数据类型 | 含义 |
data | 矩形数据集 | 可以强制转换为 ndarray 格式数据的 2 维数据集。如果提供了 Pandas DataFrame 数据,索引/列信息将用于标记列和行 |
vmin, vmax | float | 可选参数,用于锚定色彩映射的值,否则它们是从数据和其他关键字参数推断出来的 |
cmap | matplotlib 颜色条名称或者对象,或者是颜色列表 | 可选参数,从数据值到颜色空间的映射。 如果没有提供,默认值将取决于是否设置了“center” |
center | float | 可选参数,绘制有色数据时将色彩映射居中的值。 如果没有指定,则使用此参数将更改默认的cmap |
robust | bool | 可选参数,如果是 True,并且vmin或vmax为空,则使用稳健分位数而不是极值来计算色彩映射范围 |
annot | bool 或 矩形数据 | 可选参数。如果为 True,则在每个热力图单元格中写入数据值。 如果数组的形状与data相同,则使用它来代替原始数据注释热力图 |
fmt | str | 可选参数,添加注释时要使用的字符串格式代码 |
annot_kws | dict 或 键值对 | 可选参数,当annot为 True 时,ax.text的关键字参数 |
linewidths | float | 可选参数,划分每个单元格的行的宽度 |
linecolor | str 或 RGB元组 或 十六进制颜色码 | 可选参数,划分每个单元的线条的颜色 |
cbar | bool | 可选参数,描述是否绘制颜色条 |
cbar_kws | dict 或 键值对 | 可选参数,fig.colorbar的关键字参数 |
📍 seaborn.cubehelix_palette(n_colors, start, rot, gamma=, hue=, light=, dark=, reverse, as_cmap) —— 用于生成一个连续的Cubehelix颜色调色板
字段 | 数据类型 | 含义 |
n_colors | int | 调色板中颜色的数量 |
start | float | 范围在0到3之间。调色板起始颜色的位置。这决定了颜色序列的起点 |
rot | float | 范围在0到3之间。调色板旋转的角度。这可以用来改变颜色序列的方向或偏移 |
gamma | float | 通常大于0。用于控制颜色饱和度的参数。较高的gamma值会产生更鲜艳的颜色,而较低的gamma值会产生更柔和的颜色 |
hue | float | 范围在0到1之间。控制颜色的色调 |
light | float | 范围在0到1之间。控制颜色的亮度 |
reverse | bool | 如果为True,则颜色序列会反转 |
as_cmap | bool | 如果为True,则返回一个Matplotlib的colormap对象,而不是颜色的列表 |
# 1.导入库
import seaborn as sns
import matplotlib.pyplot as plt
# 2.将绘图的窗口
fig, ax = plt.subplots(figsize = (13, 13))
# 3.# 使用的是调色板,cubehelix_palette():按照线性增长计算,设置颜色
color_map = sns.cubehelix_palette(as_cmap = True)
# 4.画热力图
# data = score
# cmap:matplotlib 颜色条名称或者对象,或者是颜色列表
# linewidths:浮点数,可选参数,划分每个单元格的行的宽度。
# alpha :表示透明度
sns.heatmap(score, cmap = color_map, linewidths = 0.05, ax = ax)
# 5.将 X 轴的刻度标签移动到了坐标轴的顶部
ax.xaxis.tick_top()
# 6.显示图形
plt.show()
注意:本文中数据以及内容若有侵权,请第一时间联系删除。
本文未经作者授权,禁止转载,谢谢配合。