用面向对象思路为python数据可视化的图表添加辅助元素的定制,例如:坐标轴的标签,刻度范围和刻度标签,图表标题,图例,指定样式的网格,参考线,参考区域,注释文本,自定义样式的表格

在学习为图表添加辅助元素的定制前,小伙伴们首先需要认识图表有哪些组件,以下这张图可以帮助小伙伴认识有哪些辅助元素

在图中可以看到有许多圆圈,一个圆圈对应一个组件,圆圈下面加粗字体是所圈内容的组件名称,组件名称下面是它的用法,需要注意的是这个用法对应的是面向对象,面向函数的用法图中没有涉及,这两个用法相似,在下面的实例中这两个用法都有涉及


坐标轴的标签

在绘制好图表后,有时候会为图表添加坐标轴的标签来明确x和y轴的意义,由于x轴和y轴标签用法几乎一样,下面就x轴为例来介绍坐标轴的标签(如果是y轴,就将x改y)


面向对象语法:

Axes.set_xlabel(xlabelfontdict=Nonelabelpad=None*loc=None**kwargs)

参数说明:
xlabel:表示x轴标签的文本
fontdict:表示控制标签文本样式的字典,默认值是None
labelpad:表示标签与x轴轴脊间的距离,默认值是None 

面向函数语法:
matplotlib.pyplot.xlabel(xlabelfontdict=Nonelabelpad=None*loc=None**kwargs)

参数说明:
xlabel:表示x轴标签的文本
fontdict:表示控制标签文本样式的字典
labelpad:表示标签与x轴轴脊间的距离

对这个组件来说,这两个用法的区别是这两个的调用方式不同,面向对象是Axes.set_xlabel(),面向函数是matplotlib.pyplot.xlabel(),参数用法一致


面向对象


import matplotlib.pyplot as plt
import numpy as np
# 显示中文
plt.rcParams['font.sans-serif'] =['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1,y2 = np.sin(x),np.cos(x)
# 绘制图表
ax.plot(x,y1,x,y2)

# 添加辅助元素的定制
# 设置坐标轴标签
ax.set_xlabel('x轴')     # x轴
ax.set_ylabel('y轴')     # y轴
plt.show()

面向函数


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] =['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1,y2 = np.sin(x),np.cos(x)
# 绘制图表
plt.plot(x,y1,x,y2)
# 设置坐标轴标签
plt.xlabel('x轴')
plt.ylabel('y轴')
# 展示图表
plt.show()

结果:左图为添加坐标轴标签,右图没有添加坐标轴标签



刻度范围和刻度标签


当我们根据数据绘制图表时,坐标轴显示的刻度范围和刻度都与数据的分布有着直接的联系
注意:
1.若绘图时没有指定任何数据,也就是说只创建一个绘图区域,
该区域中没有任何内容,则x轴和y轴的刻度范围默认为0.0~1.0,
刻度标签为[0.0,0.2,0.4,0.6,0.8,1.0];
2.若绘图时指定了x轴和y轴的数据。刻度范围和刻度标签会随着数据的变化而变化,
其中坐标轴的刻度范围是由数据中的最大值的最小值决定的

面向对象的语法

刻度范围语法:Axes.set_xlim(left=Noneright=None*emit=Trueauto=Falsexmin=Nonexmax=None))

参数说明:

left:表示x轴刻度取值区间的左位数
right:表示x轴刻度取值区间的右位数
emit:表示是否通知限制变化的观察者默认为True
auto:表示是否允许自动缩放x轴,默认为True

刻度位置语法:

Axes.set_xticks(tickslabels=None*minor=False**kwargs)

ticks:表示显示自定义刻度的列表,该参数可以设置空列表,以此禁用x轴的刻度
labels:表示显示为ticks参数设置过的刻度添加标签

刻度标签语法:

Axes.set_xticklabels(labels*minor=Falsefontdict=None**kwargs)

labels:为Axes.set_xticks()设置过的ticks刻度显示添加标签

fontdict:自定义设置标签样式的字典

面向函数语法

刻度范围语法:

matplotlib.pyplot.xlim(left=Noneright=None*emit=Trueauto=Falsexmin=Nonexmax=None)

参数说明:
left:表示x轴刻度取值区间的左位数
right:表示x轴刻度取值区间的右位数
emit:表示是否通知限制变化的观察者默认为True
auto:表示是否允许自动缩放x轴,默认为True


刻度标签语法:

matplotlib.pyplot.xticks(ticks=Nonelabels=None*minor=False**kwargs)

参数说明:
ticks:表示显示刻度位置的列表,该参数可以设置空列表,以此禁用x轴的刻度
labels:表示对ticks位置过刻度添加标签的列表

Axes.set_xticks()Axes.set_xticklabels()都可以添加刻度标签,但Axes.set_xticklabels()更常用,因为它可以自定义设置标签的样式


面向对象


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)

# 绘制图表
ax.plot(x, y1, x, y2)
# 添加图表辅助元素的定制
# 添加坐标轴标签
ax.set_xlabel('x轴')
ax.set_ylabel('y轴')
# 设置刻度范围和刻度标签
ax.set_xlim(x.min() * 1.5, x.max() * 1.5)       # 刻度范围
ax.set_xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi])        # 刻度位置
ax.set_xticklabels([r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])      # 刻度标签
# 展示图表
plt.show()

面向函数


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
# 绘制图表
plt.plot(x, y1, x, y2)
# 添加图表辅助元素的定制
# 设置坐标轴标签
plt.xlabel('x轴')
plt.ylabel('y轴')
# 设置x轴的刻度范围和刻度标签
# 用面向函数
plt.xlim(x.min() * 1.5, x.max() * 1.5)  # 刻度范围
plt.xticks([-np.pi, -np.pi / 2, 0,  np.pi / 2, np.pi],       # 刻度位置
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])# 刻度标签
# 展示图表
plt.show()

结果:左图设置了刻度范围和刻度标签,右图没有设置刻度范围和刻度标签



刻度标题


每一张图表都有属于自己的意义,这个意义可以通过图表标题来说明,那么下面就来谈谈如何设置图表标题

面向对象语法:

Axes.set_title(labelfontdict=Noneloc=Nonepad=None*y=None**kwargs)

参数说明:

label:表示标题的文本

fontdict:表示标题样式的字典

loc:表示标题的位置,参数的值有'left',表示标题位于左侧;'right',表示标题位于右侧;'center',表示标题位于中央,默认值是‘center

pad:表示标题距离图表顶部的距离

面向对象语法:

matplotlib.pyplot.title(labelfontdict=Noneloc=Nonepad=None*y=None**kwargs)

参数说明:

label:表示标题的文本

fontdict:表示标题样式的字典

loc:表示标题的位置,参数的值有'left',表示标题位于左侧;'right',表示标题位于右侧;'center',表示标题位于中央,默认值是‘center

pad:表示标题距离图表顶部的距离

对这个组件来说,这两个用法的区别是这两个的调用方式不同,面向对象是Axes.set_title(),面向函数是matplotlib.pyplot.title(),参数用法一致


面向对象


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建画布
fig = plt.figure()
# 在画布上创建绘图区域
ax = fig.add_subplot(111)
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
# 绘制图表
ax.plot(x,y1,x,y2)
# 添加辅助元素的定制
# 设置刻度范围和刻度标签
ax.set_xlim(x.min() * 1.5, x.max() * 1.5)       # 刻度范围
ax.set_xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi])        # 刻度位置
ax.set_xticklabels([r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])      # 刻度标签
# 添加坐标轴标签
ax.set_xlabel('x轴')     # 添加x轴标签
ax.set_ylabel('y轴')     # 添加y轴标签
# 添加图表标题
ax.set_title('正弦和余弦的曲线')
# 展示图表
plt.show()

面向函数


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
# 绘制图表
plt.plot(x, y1, x, y2)
# 添加图表辅助元素的定制
# 设置坐标轴标签
plt.xlabel('x轴')
plt.ylabel('x轴')
# 设置x轴的刻度范围和刻度标签
plt.xlim(x.min() * 1.5, x.max() * 1.5)  # 刻度范围
plt.xticks([-np.pi, -np.pi / 2, 0,  np.pi / 2, np.pi],
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])
# 添加标题
plt.title('正弦曲线和余弦曲线')

# 展示图表
plt.show()

结果:左图添加了图表标题,右表没有添加图表标题



图例


图例是一个列举的各组图形数据标识方式的方框图,它由图例标识和图例项两部分构成,其中图例标识是代表各组图形的图案;图例项是与图例标识对应的名称

面向对象语法:

Axes.legend(*args**kwargs)

参数说明:

handles:表示由图形标识构成的列表
labels:表示由图列项构成的列表
loc:用于控制图例在图表中的位置
bbox_to_anchor:用于控制图例的布局
ncol:表示图例的列数,默认值为1
title:表示图例的标题,默认值为None
shadow:表示是否在图例后面显示阴影,默认值为None
fancybox:表示是否为图例设置圆角边框,默认值为None

面向函数语法:
matplotlib.pyplot.legend(*args**kwargs)

参数说明:

handles:表示由图形标识构成的列表
labels:表示由图列项构成的列表
loc:用于控制图例在图表中的位置
bbox_to_anchor:用于控制图例的布局
ncol:表示图例的列数,默认值为1
title:表示图例的标题,默认值为None
shadow:表示是否在图例后面显示阴影,默认值为None
fancybox:表示是否为图例设置圆角边框,默认值为None

对这个组件来说,这两个用法的区别是这两个的调用方式不同,面向对象是Axes.legend(),面向函数是matplotlib.pyplot.legend(),参数用法一致


面向对象


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
legend_labels = ['正弦曲线','余弦曲线']
# 绘制图表
lines = ax.plot(x, y1, x, y2)
# 添加图表辅助元素的定制
# 设置坐标轴标签
ax.set_xlabel('x轴')
ax.set_ylabel('x轴')
# 设置x轴的刻度范围和刻度标签
ax.set_xlim(x.min() * 1.5, x.max() * 1.5)        # 刻度范围
ax.set_xticks([-np.pi, -np.pi / 2, 0,  np.pi / 2, np.pi])       # 刻度位置
ax.set_xticklabels([r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])      # 刻度标签
# 添加标题
ax.set_title('正弦曲线和余弦曲线')
# 添加图例
ax.legend(lines,legend_labels,shadow=True,fancybox=True)
# 展示图表
plt.show()

面向函数


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
labels = ['正弦曲线','余弦曲线']
# 绘制图表
lines = plt.plot(x, y1, x, y2)
# 添加图表辅助元素的定制
# 设置坐标轴标签
plt.xlabel('x轴')
plt.ylabel('x轴')
# 设置x轴的刻度范围和刻度标签
plt.xlim(x.min() * 1.5, x.max() * 1.5)  # 刻度范围
plt.xticks([-np.pi, -np.pi / 2, 0,  np.pi / 2, np.pi],        # 刻度位置
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])        # 刻度标签
# 添加标题
plt.title('正弦曲线和余弦曲线')
# 添加图例
plt.legend(lines,labels,shadow=True,fancybox=True)
# 展示图表
plt.show()

结果:左图添加了图例,右图没有添加图例


指定样式的网格


网格是从刻度线开始延伸,贯穿至整个绘图区域的辅助线条,它能帮助人们轻松地查看图形的数值。网格可以分为垂直网格和水平网格,这两种网格既可以单独使用,也可以同时使用

面向对象语法:

Axes.grid(visible=Nonewhich='major'axis='both'**kwargs)

参数说明:
visible:表示是否显示网格,默认为None,表示显示网格
which:表示显示网格的类型,支持'major'(主刻度网格线)、'minor'(次要刻度网格线)、'both'(两者)三种数值,默认为major
axis;表示显示哪个方向的网格,支持'both'(两者)、'x'(垂直网格)和'y'(水平网格)三种取值,默认为'both'
linewidth或lw:网格线的宽度

面向函数语法:

matplotlib.pyplot.grid(visible=Nonewhich='major'axis='both'**kwargs)

参数说明:
visible:表示是否显示网格,默认为None,表示显示网格
which:表示显示网格的类型,支持'major'(主刻度网格线)、'minor'(次要刻度网格线)、'both'(两者)三种数值,默认为major
axis;表示显示哪个方向的网格,支持'both'(两者)、'x'(垂直网格)和'y'(水平网格)三种取值,默认为'both'
linewidth或lw:网格线的宽度

对这个组件来说,这两个用法的区别是这两个的调用方式不同,面向对象是Axes.grid(),面向函数是matplotlib.pyplot.grid(),参数用法一致


面向对象


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
legend_labels = ['正弦曲线','余弦曲线']
# 绘制图表
lines = plt.plot(x, y1, x, y2)
# 添加图表辅助元素的定制
# 设置坐标轴标签
ax.set_xlabel('x轴')
ax.set_ylabel('x轴')
# 设置x轴的刻度范围和刻度标签
ax.set_xlim(x.min() * 1.5, x.max() * 1.5)        # 刻度范围
ax.set_xticks([-np.pi, -np.pi / 2, 0,  np.pi / 2, np.pi])       # 刻度位置
ax.set_xticklabels([r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])      # 刻度标签
# 添加标题
ax.set_title('正弦曲线和余弦曲线')
# 添加图例
ax.legend(lines,legend_labels,shadow=True,fancybox=True)
# 显示水平网格
ax.grid(axis='y',lw=0.3)
# 展示图表
plt.show()

面向函数


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
legend_labels = ['正弦曲线','余弦曲线']
# 绘制图表
lines = plt.plot(x, y1, x, y2)
# 添加图表辅助元素的定制
# 设置坐标轴标签
plt.xlabel('x轴')
plt.ylabel('x轴')
# 设置x轴的刻度范围和刻度标签
plt.xlim(x.min()*1.5, x.max()*1.5)  # 刻度范围
plt.xticks([-np.pi, -np.pi / 2, 0,  np.pi / 2, np.pi],
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])
# 添加标题
plt.title('正弦曲线和余弦曲线')
# 添加图例
plt.legend(lines,legend_labels,shadow=True,fancybox=True)
# 显示水平网格
plt.grid(visible=True)
# 展示图表
plt.show()

结果:左图显示了指定样式的网格,右图没有显示指定样式的网格



参考线


参考线是一条或多条贯穿绘图区域的线条,用于为绘图区域中图形数据之间的比较提供参考依据,
比如目标线、平均线、预算线等。参考线按方向的不同可分为水平参考线和垂直参考线。由于这两种用法相似,下面就以水平参考线语法进行说明(如果是垂直参考线,就将axhline()中的“h”改为"v",将参数里的“x”改为“y”)

面向对象语法:

Axes.axhline(y=0xmin=0xmax=1**kwargs)

参数说明:
y:表示水平参考线的y坐标
xmin:表示水平参考线的起始位置,默认为0
xmax:表示水平参考线的终止位置,默认为1
linestyle:表示水平参考线的类型,默认为实线

面向函数语法:

matplotlib.pyplot.axhline(y=0xmin=0xmax=1**kwargs)

参数说明:
y:表示水平参考线的y坐标
xmin:表示水平参考线的起始位置,默认为0
xmax:表示水平参考线的终止位置,默认为1
linestyle:表示水平参考线的类型,默认为实线

对这个组件来说,这两个用法的区别是这两个的调用方式不同,面向对象是Axes.axhline(),面向函数是matplotlib.pyplot.axhline(),参数用法一致


面向对象


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
legend_labels = ['正弦曲线','余弦曲线']
# 绘制图表
lines = plt.plot(x, y1, x, y2)
# 添加图表辅助元素的定制
# 设置坐标轴标签
ax.set_xlabel('x轴')
ax.set_ylabel('x轴')
# 设置x轴的刻度范围和刻度标签
ax.set_xlim(x.min() * 1.5, x.max() * 1.5)        # 刻度范围
ax.set_xticks([-np.pi, -np.pi / 2, 0,  np.pi / 2, np.pi])       # 刻度位置
ax.set_xticklabels([r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])      # 刻度标签
# 添加标题
ax.set_title('正弦曲线和余弦曲线')
# 添加图例
ax.legend(lines,legend_labels,shadow=True,fancybox=True)
# 显示水平网格
ax.grid(axis='y',lw=0.3)
# 添加参考线
ax.axhline(y=0,linestyle='--')     # 水平参考线
ax.axvline(x=0,linestyle='--')     # 垂直参考线
# 展示图表
plt.show()

面向函数


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
legend_labels = ['正弦曲线','余弦曲线']
# 绘制图表
lines = plt.plot(x, y1, x, y2)
# 添加图表辅助元素的定制
# 设置坐标轴标签
plt.xlabel('x轴')
plt.ylabel('x轴')
# 设置x轴的刻度范围和刻度标签
plt.xlim(x.min()*1.5, x.max()*1.5)  # 刻度范围
plt.xticks([-np.pi, -np.pi / 2, 0,  np.pi / 2, np.pi],
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])
# 添加标题
plt.title('正弦曲线和余弦曲线')
# 添加图例
plt.legend(lines,legend_labels,shadow=True,fancybox=True)
# 显示水平网格
plt.grid(axis='y',lw=0.3)
# 添加水平和垂直参考线
plt.axhline(y=0,linestyle='--')
plt.axvline(x=0,linestyle='--')
# 展示图表
plt.show()

结果:左图添加了参考线,右图没有添加参考线


参考区域


在绘图时,有时会有一块区域是有特殊意义,这块区域在matplotlib数据可视化中被叫做参考区域。参考区域分为水平参考区域和垂直参考区域,由于这两个参考区域用法相似,下面就以水平参考区域的用法为例进行说明(如果是垂直参考区域,就将axhapan()中的“h”为"v",将参数里的“x”改为“y”)

面向对象语法:

Axes.axhspan(yminymaxxmin=0xmax=1**kwargs)

ymin:表示水平跨度的下限,以数据为单位
ymax:表示水平跨度的上限,以数据为单位
xmin:表示垂直跨度的下限,以数据为单位,默认值为0
xmax:表示垂直跨度的下限,以数据为单位,默认值为1
alphe:表示参考区域的透明度

面向函数语法:

matplotlib.pyplot.axhspan(yminymaxxmin=0xmax=1**kwargs)

ymin:表示水平跨度的下限,以数据为单位

ymax:表示水平跨度的上限,以数据为单位
xmin:表示垂直跨度的下限,以数据为单位,默认值为0
xmax:表示垂直跨度的下限,以数据为单位,默认值为1

alphe:表示参考区域的透明度


面向对象


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
legend_labels = ['正弦曲线','余弦曲线']
# 绘制图表
lines = plt.plot(x, y1, x, y2)
# 添加图表辅助元素的定制
# 设置坐标轴标签
ax.set_xlabel('x轴')
ax.set_ylabel('x轴')
# 设置x轴的刻度范围和刻度标签
ax.set_xlim(x.min() * 1.5, x.max() * 1.5)        # 刻度范围
ax.set_xticks([-np.pi, -np.pi / 2, 0,  np.pi / 2, np.pi])       # 刻度位置
ax.set_xticklabels([r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])      # 刻度标签
# 添加标题
ax.set_title('正弦曲线和余弦曲线')
# 添加图例
ax.legend(lines,legend_labels,shadow=True,fancybox=True)
# 显示水平网格
ax.grid(axis='y',lw=0.3)
# 添加参考线
ax.axhline(y=0,linestyle='--')     # 水平参考线
ax.axvline(x=0,linestyle='--')     # 垂直参考线
# 添加参考区域
ax.axhspan(ymin=0.5,ymax=1,alpha=0.4)       # 水平参考区域
ax.axvspan(xmin=0.5,xmax=2,alpha=0.4)       # 垂直参考区域
# 展示图表
plt.show()

面向函数


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
legend_labels = ['正弦曲线','余弦曲线']
# 绘制图表
lines = plt.plot(x, y1, x, y2)
# 添加图表辅助元素的定制
# 设置坐标轴标签
plt.xlabel('x轴')
plt.ylabel('x轴')
# 设置x轴的刻度范围和刻度标签
plt.xlim(x.min()*1.5, x.max()*1.5)  # 刻度范围
plt.xticks([-np.pi, -np.pi / 2, 0,  np.pi / 2, np.pi],
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])
# 添加标题
plt.title('正弦曲线和余弦曲线')
# 添加图例
plt.legend(lines,legend_labels,shadow=True,fancybox=True)
# 显示水平网格
plt.grid(axis='y',lw=0.3)
# 添加水平和垂直参考线
plt.axhline(y=0,linestyle='--')
plt.axvline(x=0,linestyle='--')
# 添加参考区域
plt.axhspan(ymin=0.5,ymax=1,alpha=0.4)
plt.axvspan(xmin=0.5,xmax=2,alpha=0.4)
# 展示图表
plt.show()

结果:左图为添加参考区域,右图没有添加参考区域



注释文本


注释文本是图表的重要组成部分,他能够对图形进行简短地描述,有助于用户理解图表。注释文本按注释对象的不同主要分为指向型注释文本和无指向型注释文本,其中指向型注释文本一般是针对图表某一部分的特定说明,无指向型注释文本一般是针对图表整体的特定说明。

指向型注释文本是指通过指示箭头的注释方式对绘图区域的图形进行解释的文本,
它一般使用线条连接说明点和箭头指向的注释文字

无指向型注释文本是指仅使用文字的注释方式对绘图区域的图形进行说明的文本

指向型注释文本面向对象语法:

Axes.annotate(textxyxytext=Nonexycoords='data'textcoords=Nonearrowprops=Noneannotation_clip=None**kwargs)

参数说明:

s:表示注释文本的内容
xy:表示被注释对象的坐标位置,接收元组(x,y)
xytext:表示注释文本所在的坐标位置,接收元组(x,y)
arrowprops:表示指示箭头的属性(arrowprops参数接收一个包含若干键的字典,通过向字典中添加键值对以控制箭头的显示,常见的控制箭头的键包括width(箭头宽度)、headwidth(头宽)、headlength(头长)、arrowstyle(箭头类型)等)
bbox:表示注释文本的边框属性

无指向型注释文本面向对象语法:

Axes.text(xysfontdict=None**kwargs)

x:表示x坐标
y:表示y坐标,和x参数一起确定注释文本的位置
s:表示注释文本的内容
horizontalalignment或ha:表示水平对齐的方式,可以取值为'center'、'right'或left

指向型注释文本面向函数语法:

matplotlib.pyplot.annotate(textxyxytext=Nonexycoords='data'textcoords=Nonearrowprops=Noneannotation_clip=None**kwargs)

参数说明:

s:表示注释文本的内容
xy:表示被注释对象的坐标位置,接收元组(x,y)
xytext:表示注释文本所在的坐标位置,接收元组(x,y)
arrowprops:表示指示箭头的属性(arrowprops参数接收一个包含若干键的字典,通过向字典中添加键值对以控制箭头的显示,常见的控制箭头的键包括width(箭头宽度)、headwidth(头宽)、headlength(头长)、arrowstyle(箭头类型)等)
bbox:表示注释文本的边框属性

无指向型注释文本面向函数语法:

matplotlib.pyplot.text(xysfontdict=None**kwargs)

x:表示x坐标
y:表示y坐标,和x参数一起确定注释文本的位置
s:表示注释文本的内容

fontdict:表示注释文本样式的字典
horizontalalignment或ha:表示水平对齐的方式,可以取值为'center'、'right'或left


面向对象


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
legend_labels = ['正弦曲线','余弦曲线']
# 绘制图表
lines = plt.plot(x, y1, x, y2)
# 添加图表辅助元素的定制
# 设置坐标轴标签
ax.set_xlabel('x轴')
ax.set_ylabel('x轴')
# 设置x轴的刻度范围和刻度标签
ax.set_xlim(x.min() * 1.5, x.max() * 1.5)        # 刻度范围
ax.set_xticks([-np.pi, -np.pi / 2, 0,  np.pi / 2, np.pi])       # 刻度位置
ax.set_xticklabels([r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])      # 刻度标签
# 添加标题
ax.set_title('正弦曲线和余弦曲线')
# 添加图例
ax.legend(lines,legend_labels,shadow=True,fancybox=True)
# 显示水平网格
ax.grid(axis='y',lw=0.3)
# 添加参考线
ax.axhline(y=0,linestyle='--')     # 水平参考线
ax.axvline(x=0,linestyle='--')     # 垂直参考线
# 添加参考区域
ax.axhspan(ymin=0.5,ymax=1,alpha=0.4)       # 水平参考区域
ax.axvspan(xmin=0.5,xmax=2,alpha=0.4)       # 垂直参考区域
# 添加注释文本
# 指向型注释文本
ax.annotate('最小值',(-np.pi/2,-1),(-np.pi/2,-0.5),arrowprops={'arrowstyle':'->'})
# 添加无指向型注释文本
ax.text(np.pi, 0.25, 'y=sin(x)',bbox={'alpha':0.25})
# # 展示图表
plt.show()

面向函数


import matplotlib.pyplot as plt
import numpy as np


# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
legend_labels = ['正弦曲线','余弦曲线']
# 绘制图表
lines = plt.plot(x, y1, x, y2)
# 添加图表辅助元素的定制
# 设置坐标轴标签
plt.xlabel('x轴')
plt.ylabel('x轴')
# 设置x轴的刻度范围和刻度标签
plt.xlim(x.min()*1.5, x.max()*1.5)  # 刻度范围
plt.xticks([-np.pi, -np.pi / 2, 0,  np.pi / 2, np.pi],
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])
# 添加标题
plt.title('正弦曲线和余弦曲线')
# 添加图例
plt.legend(lines,legend_labels,shadow=True,fancybox=True)
# 显示水平网格
plt.grid(axis='y',lw=0.3)
# 添加水平和垂直参考线
plt.axhline(y=0,linestyle='--')
plt.axvline(x=0,linestyle='--')
# 添加参考区域
plt.axhspan(ymin=0.5,ymax=1,alpha=0.4)
plt.axvspan(xmin=0.5,xmax=2,alpha=0.4)
# 添加注释文本
# 指向型注释文本
plt.annotate('最小值',(-np.pi/2,-1),(-np.pi/2,-0.5),arrowprops={'arrowstyle':'->'})
# 添加无指向型注释文本
plt.text(np.pi, 0.25, 'y=sin(x)',bbox={'alpha':0.25})
# 展示图表
plt.show()

结果:左图为添加指向型注释文本和无指向型注释文本,右图没有添加指向型注释文本和无指向型注释文本



自定义样式的表格


自定义样式的表格可以让图表中的数据更直观,例如突出关键点,提供额外信息并使其看起来更好。下面就来谈谈如何使用自定义样式的表格

面向对象语法:

Axes.table(cellText=NonecellColours=NonecellLoc='right'colWidths=NonerowLabels=NonerowColours=NonerowLoc='left'colLabels=NonecolColours=NonecolLoc='center'loc='bottom'bbox=Noneedges='closed'**kwargs)

参数说明:

cellText:表示表格单元格中的数据,可以是一个二维列表。

cellColours:表示单元格的背景颜色。
cellLoc:表示单元格文本的对齐方式,支持'left'、'center'、'right'三种取值,默认为'right'。
colWidths:表示每列的宽度。
rowLabels:表示行标题的文本。

rowColours:表示行标题的颜色

rowLoc:表示行标题的对齐方式,支持‘left'、‘center’、‘right’三种取值,默认值是‘left’。
colLabels:表示列标题的文本。
colColours:表示列标题所在单元格的背景颜色。
colLoc:表示列标题的对齐方式,默认为左对齐。
loc:表示表格与绘图区域的对齐方式。


面向函数语法:

matplotlib.pyplot.table(cellText=NonecellColours=NonecellLoc='right'colWidths=NonerowLabels=NonerowColours=NonerowLoc='left'colLabels=NonecolColours=NonecolLoc='center'loc='bottom'bbox=Noneedges='closed'**kwargs)

参数说明:

cellText:表示表格单元格中的数据,可以是一个二维列表。

cellColours:表示单元格的背景颜色。
cellLoc:表示单元格文本的对齐方式,支持'left'、'center'、'right'三种取值,默认为'right'。
colWidths:表示每列的宽度。
rowLabels:表示行标题的文本。

rowColours:表示行标题的颜色

rowLoc:表示行标题的对齐方式,支持‘left'、‘center’、‘right’三种取值,默认值是‘left’。
colLabels:表示列标题的文本。
colColours:表示列标题所在单元格的背景颜色。
colLoc:表示列标题的对齐方式,默认为左对齐。
loc:表示表格与绘图区域的对齐方式。

对这个组件来说,这两个用法的区别是这两个的调用方式不同,面向对象是Axes.table(),面向函数是matplotlib.pyplot.table(),参数用法一致


面向对象


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
legend_labels = ['正弦曲线','余弦曲线']
# 绘制图表
lines = plt.plot(x, y1, x, y2)
# 添加图表辅助元素的定制
# 设置坐标轴标签
ax.set_xlabel('x轴')
ax.set_ylabel('x轴')
# 设置x轴的刻度范围和刻度标签
ax.set_xlim(x.min() * 1.5, x.max() * 1.5)        # 刻度范围
ax.set_xticks([-np.pi, -np.pi / 2, 0,  np.pi / 2, np.pi])       # 刻度位置
ax.set_xticklabels([r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])      # 刻度标签
# 添加标题
ax.set_title('正弦曲线和余弦曲线')
# 添加图例
ax.legend(lines,legend_labels,shadow=True,fancybox=True)
# 显示水平网格
ax.grid(axis='y',lw=0.3)
# 添加参考线
ax.axhline(y=0,linestyle='--')     # 水平参考线
ax.axvline(x=0,linestyle='--')     # 垂直参考线
# 添加参考区域
ax.axhspan(ymin=0.5,ymax=1,alpha=0.4)       # 水平参考区域
ax.axvspan(xmin=0.5,xmax=2,alpha=0.4)       # 垂直参考区域
# 添加注释文本
# 指向型注释文本
ax.annotate('最小值',(-np.pi/2,-1),(-np.pi/2,-0.5),arrowprops={'arrowstyle':'->'})
# 添加无指向型注释文本
ax.text(np.pi, 0.25, 'y=sin(x)',bbox={'alpha':0.25})
# 添加自定义样式的表格
ax.table(cellText=[[-1,1],[-1,1]],rowLabels=['最小值','最大值'],colLabels=['正弦','余弦'],
          colWidths=[0.1]*3,loc='lower right')
# # 展示图表
plt.show()

面向函数


import matplotlib.pyplot as plt
import numpy as np

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 准备数据
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
legend_labels = ['正弦曲线','余弦曲线']
# 绘制图表
lines = plt.plot(x, y1, x, y2)
# 添加图表辅助元素的定制
# 设置坐标轴标签
plt.xlabel('x轴')
plt.ylabel('x轴')
# 设置x轴的刻度范围和刻度标签
plt.xlim(x.min()*1.5, x.max()*1.5)  # 刻度范围
plt.xticks([-np.pi, -np.pi / 2, 0,  np.pi / 2, np.pi],
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])
# 添加标题
plt.title('正弦曲线和余弦曲线')
# 添加图例
plt.legend(lines,legend_labels,shadow=True,fancybox=True)
# 显示水平网格
plt.grid(axis='y',lw=0.3)
# 添加水平和垂直参考线
plt.axhline(y=0,linestyle='--')
plt.axvline(x=0,linestyle='--')
# 添加参考区域
plt.axhspan(ymin=0.5,ymax=1,alpha=0.4)
plt.axvspan(xmin=0.5,xmax=2,alpha=0.4)
# 添加注释文本
# 指向型注释文本
plt.annotate('最小值',(-np.pi/2,-1),(-np.pi/2,-0.5),arrowprops={'arrowstyle':'->'})
# 添加无指向型注释文本
plt.text(np.pi, 0.25, 'y=sin(x)',bbox={'alpha':0.25})
# 添加自定义样式的表格
plt.table(cellText=[[-1,1],[-1,1]],rowLabels=['最小值','最大值'],colLabels=['正弦','余弦'],
          colWidths=[0.1]*3,loc='lower right')
# 展示图表
plt.show()

结果:左图添加自定义样式的表格,右图没有添加自定义样式的表格

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Life City

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值