Python——Matplotlib绘制图形(2)

✒️ 4、添加图形标题

1️⃣ 4.1 添加英文标题

  • plot.title(label, fontdict=None,loc= ‘ center ‘, pad=None,**kwargs)
字段数据类型含义
label str所需要设置标题的文本字符串
fontdictdict设置文本的大小、外观等,默认为fontdict = {‘ fontsize ‘: rcParams[‘ axes.titlesize ‘],“fontweight”:rcParams(“轴# @titleweight”),“verticalalignment”:“基线”,“horizontalalignment”:loc}
locstr设置哦标题的位置
padfloat指的是标题从轴的顶端到顶点的偏移量,单位为点。它的默认值为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)

字段数据类型含义
nrowsint子图的行数
ncolsint子图的列数
sharex, shareystr控制 x 或 y 轴是否应该共享。'none' 或 False 表示不共享,'all' 表示所有子图共享,'row' 表示每行共享,'col' 表示每列共享
figsizefloat图形窗口的尺寸(宽度,高度),单位是英寸
dpifloat图形窗口的分辨率,每英寸的点数
gridspec_kwdict用于创建GridSpec的参数,GridSpec可以控制子图的位置和大小
**fig_kwdict额外的关键字参数传递给Figure构造函数
squeezebool如果True,则删除一维的条目,使得返回的数组更加紧凑
subplot_kwdict传递给add_subplot 或subplot的关键字参数
gridbool是否显示网格线
**axes_kwdict传递给add_axes的关键字参数

 plt.subplot(1,2,1) —— 表示将绘图的窗口分成1行两列,将图画在第一个位置

📍 plot.grid(b,which, axis,color,linestyle,linewidth,\\kwargs)

字段数据类型含义
bbool设置是否显示网格线,True
whichstr用于指定在哪个轴上显示网格线。可能的值有'major'(仅主刻度)、'minorr'(仅次刻度)或'both'(主刻度和次刻度)
axisstr用于指定网格线显示的轴。可以是‘x’,‘y’,‘both’
colorstr设置网格的颜色
linestylestr用于设置网格线的线型
linewidthfloat 或 int用于设置网格线的线宽

 plt.grid()  —— 表示图内是否显示网格线,1=True:表示显示网格线,0=Flase:表示不显示 ,默   认值是显示

📍 plot.tight_layout(pad,h_pad,w_pad,rect)

字段数据类型含义
padfloat控制子图之间的填充量
h_padfloat控制子图之间的水平填充量
w_padfloat控制子图之间的垂直填充量
rectfloat定义子图应该填充的矩形区域,其坐标是相对于图形窗口

 plt.tight_layout()  —— 自动调整布局,它仅仅检查坐标轴标签、刻度标签以及标题的部分是否需   要调整

📍 plot.suptitle (t,x,y, horizontalalignment ,verticalalignment,fontsize,fontweight,* * kwargs)

字段数据类型含义
tstr设置标题的文本
xfloat标题的水平位置,相对于图形宽度的比例。默认值为 0.5,即居中
yfloat标题的垂直位置,相对于图形高度的比例。默认值通常根据其他参数自动计算,但也可以通过设置来手动调整
horizontalalignment(ha)str水平对齐方式,可以是 'center', 'left', 'right' 等.默认值为 'center'
verticalalignment(va)str垂直对齐方式,可以是 'center', 'top', 'bottom', 'baseline' 等。默认值为 'top'
fontsizeint 或 float标题的字体大小,可以是具体的数值(整数或浮点数),也可以是字符串表示的相对大小
fontweightstr 或 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)

字段数据类型含义
Cfloat这个参数包含要进行颜色映射的2D数组中的值
X,Yfloat这些参数是四边形角的坐标。它们通常是 NumPy 的二维数组,每个数组的形状为(m+1,n+1)或(m,n),其中m和n是网格的行数和列数
cmapstr这个参数是一个 colormap 实例或注册的 colormap 名称
normNormalize 类的实例这是一个 Normalize 实例,用于将数据值缩放到规范的colormap ,范围 [0, 1]
vmin, vmaxfloat这些参数定义了颜色条的范围
alphafloat这个参数控制颜色的透明度,范围通常为 [0, 1]
shadingstr这个参数控制网格的填充样式,可以是 'flat' 或 'gouraud'
edgecolorsstr 或 颜色序列或 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)

字段数据类型含义
mappableScalarMappable对象必须提供的参数,通过contourf、pcolormesh 或imshow等函数返回的绘图对象。这个对象包含了数据与颜色之间的映射关系(即 colormap 和 normalization 信息)
cax-允许你指定一个已经存在的轴(axes)作为颜色条的位置。如果没有提供cax,颜色条将作为一个新的轴添加到图形中
ax-允许你指定颜色条应该依附于哪个现有的轴。当提供了ax参数时,颜色条会自动从这个轴中“借用”一部分空间作为自己的空间
orientationstr控制颜色条的朝向,默认为垂直方向。也可以设置为 'horizontal',使颜色条水平放置
extendstr用于在颜色条的两端额外标出 normalization 范围外的颜色。可选值包括 'both'(两端都显示)、'max'(仅在数值大的那端显示)、'min'(仅在数值小的那端显示)
shrinkfloat缩放颜色条,从 0 到 1 的值将决定颜色条的缩放比例
padfloat控制颜色条与子图之间的间距
ticks序列或 Locator 对象指定颜色条上的刻度位置
formatfloat控制颜色条上刻度的格式,例如设置为 '%.2f' 可以保留两位小数
labelstr为颜色条添加一个标签

  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,...)

字段数据类型含义
axisstr可以是’x','y','both',或者是这些字符串的列表,用于指定设置哪些轴的刻度参数
whichstr用于指定设置主刻度('major')、副刻度('minor')还是两者都设置('both')
directionstr可以是'in','out','inout',用于设置刻度标签的方向
lengthfloat 用于设置刻度线的长度
widthfloat 用于设置刻度线的宽度
colorstr用于设置刻度线和刻度标签的颜色
padfloat 用于设置刻度标签与轴线之间的距离
labelsizefloat 或 str用于设置刻度标签的字体大小
labelcolorstr用于设置刻度标签的颜色

📍 在 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, vmaxfloat可选参数,用于锚定色彩映射的值,否则它们是从数据和其他关键字参数推断出来的
cmapmatplotlib 颜色条名称或者对象,或者是颜色列表可选参数,从数据值到颜色空间的映射。 如果没有提供,默认值将取决于是否设置了“center”
centerfloat可选参数,绘制有色数据时将色彩映射居中的值。 如果没有指定,则使用此参数将更改默认的cmap
robustbool可选参数,如果是 True,并且vmin或vmax为空,则使用稳健分位数而不是极值来计算色彩映射范围
annotbool 或 矩形数据可选参数。如果为 True,则在每个热力图单元格中写入数据值。 如果数组的形状与data相同,则使用它来代替原始数据注释热力图
fmtstr可选参数,添加注释时要使用的字符串格式代码
annot_kwsdict 或 键值对可选参数,当annot为 True 时,ax.text的关键字参数
 linewidthsfloat可选参数,划分每个单元格的行的宽度
linecolorstr 或 RGB元组 或 十六进制颜色码可选参数,划分每个单元的线条的颜色
cbarbool可选参数,描述是否绘制颜色条
cbar_kwsdict 或 键值对可选参数,fig.colorbar的关键字参数

📍 seaborn.cubehelix_palette(n_colors, start, rot, gamma=, hue=, light=, dark=, reverse, as_cmap) —— 用于生成一个连续的Cubehelix颜色调色板

字段数据类型含义
n_colorsint调色板中颜色的数量
startfloat范围在0到3之间。调色板起始颜色的位置。这决定了颜色序列的起点
rotfloat范围在0到3之间。调色板旋转的角度。这可以用来改变颜色序列的方向或偏移
gammafloat通常大于0。用于控制颜色饱和度的参数。较高的gamma值会产生更鲜艳的颜色,而较低的gamma值会产生更柔和的颜色
huefloat范围在0到1之间。控制颜色的色调
lightfloat范围在0到1之间。控制颜色的亮度
reversebool如果为True,则颜色序列会反转
as_cmapbool如果为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()

注意:本文中数据以及内容若有侵权,请第一时间联系删除。

           本文未经作者授权,禁止转载,谢谢配合。

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cherry晴

创作不易,多多包涵~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值