文章目录
- Axes绘图的方法
- Axes关于坐标轴的方法
-
- Axes.set_xticks(self, ticks, minor=False)
- Axes.set_xticklabels(self, labels, fontdict=None, minor=False, **kwargs)
- 注解annotate
- 鼠标滑过显示隐藏内容用annotate实现
大多数图标修饰工作主要有两种方式:使用程序性的pyplot接口(即matplotlib.pyplot)和更多面向对象原生的matplotlibAPI。
matplotlib主要就是理解figure(画布)、axes(坐标系)、axis(坐标轴)三者之间的关系。
文章图片
除去set_axis_off,set_axis_on,set_axisbelow,其他去掉set_前缀都可以做为plt.subplot的参数。 【python数据分析|Matplotlib属性及注解】
plt.subplot(211, sharex=ax1, sharey=ax1, label='label',alpha=0.5, fc='r', yscale='log')
Axes绘图的方法
方法 | 说明 |
---|---|
Axes.plot | 将y对x绘制为线条或标记。 |
Axes.errorbar | 将y与x绘制为带有错误栏的线和/或标记。 |
Axes.scatter | y与y的散点图 |
Axes.plot_date | 绘制强制轴以将浮点数视为日期的图。 |
Axes.step | 绘制一个阶梯图。 |
Axes.loglog | 在x轴和y轴上使用对数缩放绘制图。 |
Axes.semilogx | 在x轴上绘制具有对数比例的图。 |
Axes.semilogy | 用y轴上的对数比例绘制图。 |
Axes.fill_between | 填充两条水平曲线之间的区域。 |
Axes.fill_betweenx | 填充两条垂直曲线之间的区域。 |
Axes.bar | 绘制条形图。 |
Axes.barh | 绘制水平条形图。 |
Axes.bar_label | 标记条形图。 |
Axes.stem | 创建一个茎图。 |
Axes.eventplot | 在给定位置绘制相同的平行线。 |
Axes.pie | 绘制饼图。 |
Axes.stackplot | 绘制堆积面积图。 |
Axes.broken_barh | 绘制矩形的水平序列。 |
Axes.vlines | 在每个x上绘制从ymin到ymax的垂直线。 |
Axes.hlines | 在从xmin到xmax的每个y上绘制水平线。 |
Axes.fill | 绘制填充的多边形。 |
Axes.axhline | 在轴上添加一条水平线。 |
Axes.axhspan | 在轴上添加水平跨度(矩形)。 |
Axes.axvline | 在轴上添加一条垂直线。 |
Axes.axvspan | 在轴上添加垂直跨度(矩形)。 |
Axes.axline | 添加无限长的直线。 |
Axes.acorr | 绘制x的自相关。 |
Axes.angle_spectrum | 绘制角度光谱。 |
Axes.cohere | 绘制x和y之间的相干性。 |
Axes.csd | 绘制交叉光谱密度。 |
Axes.magnitude_spectrum | 绘制幅度谱。 |
Axes.phase_spectrum | 绘制相位谱。 |
Axes.psd | 绘制功率谱密度。 |
Axes.specgram | 绘制频谱图。 |
Axes.xcorr | 绘制x和y之间的互相关。 |
Axes.clabel | 标注等高线图。 |
Axes.contour | 绘制轮廓线。 |
Axes.contourf | 绘制填充轮廓。 |
Axes.imshow | 将数据显示为图像,即在2D常规栅格上。 |
Axes.matshow | 将2D矩阵或数组的值绘制为颜色编码的图像。 |
Axes.pcolor | 创建具有非规则矩形网格的伪彩色图。 |
Axes.pcolorfast | 创建具有非规则矩形网格的伪彩色图。 |
Axes.pcolormesh | 创建具有非规则矩形网格的伪彩色图。 |
Axes.spy | 绘制2D阵列的稀疏模式。 |
Axes.get_xaxis_transform | 获取用于绘制x轴标签,刻度线和网格线的转换。 |
Axes.get_yaxis_transform | 获取用于绘制y轴标签,刻度线和网格线的转换。 |
Axes.get_data_ratio | 返回缩放数据的纵横比。 |
方法 | 说明 |
---|---|
Axes.axis | 获取或设置某些轴属性的便捷方法。 |
Axes.set_axis_off | 关闭x和y轴。 |
Axes.set_axis_on | 开启x和y轴。 |
Axes.set_frame_on | 设置是否绘制轴矩形补丁。 |
Axes.get_frame_on | 获取是否绘制了轴矩形补丁。 |
Axes.set_axisbelow | 设置轴刻度线和网格线是在图上方还是下方。 |
Axes.get_axisbelow | 获取轴刻度和网格线是在图上方还是下方。 |
Axes.grid | 增加网格线。 |
Axes.get_facecolor | 获取轴的表面色。 |
Axes.set_facecolor | 设置轴的表面色。 |
Axes.invert_xaxis | 反转x轴。 |
Axes.xaxis_inverted | 返回x轴是否沿“反”方向定向。 |
Axes.invert_yaxis | 反转y轴。 |
Axes.yaxis_inverted | 返回y轴是否沿“反”方向定向。 |
Axes.set_xlim | 设置x轴范围。 |
Axes.get_xlim | 返回x轴范围。 |
Axes.set_ylim | 设置y轴范围。 |
Axes.get_ylim | 返回y轴范围。 |
Axes.set_xbound | 设置x轴的上下边界。 |
Axes.get_xbound | 以递增顺序返回x轴的上下边界。 |
Axes.set_ybound | 设置y轴的上下边界。 |
Axes.get_ybound | 以递增顺序返回y轴的上下边界。 |
Axes.set_xlabel | 设置x轴的标签。 |
Axes.get_xlabel | 获取xlabel文本字符串。 |
Axes.set_ylabel | 设置y轴的标签。 |
Axes.get_ylabel | 获取ylabel文本字符串。 |
Axes.set_title(self, label, fontdict=None, loc=None, pad=None, *, y=None) | 为轴设置标题。fontdict:{‘fontsize’: rcParams[‘axes.titlesize’],‘fontweight’: rcParams[‘axes.titleweight’], ‘color’: rcParams[‘axes.titlecolor’],‘verticalalignment’: ‘baseline’,‘horizontalalignment’: loc}。loc : {‘center’, ‘left’, ‘right’} |
Axes.get_title(self, loc=“center”) | 获取轴标题。left,center,right。 |
Axes.legend | 在轴上放置一个图例。 |
Axes.get_legend | 返回Legend实例,如果未定义图例,则返回None。 |
Axes.get_legend_handles_labels(self, legend_handler_map=None) | 返回图例的句柄和标签 |
Axes.set_xscale | 设置x轴比例。 |
Axes.get_xscale | 返回xaxis的比例尺(以str表示)。 |
Axes.set_yscale | 设置y轴比例。 |
Axes.get_yscale | 返回yaxis的比例尺(以str表示)。 |
Axes.set_xticks | 设置xaxis的刻度位置。 |
Axes.get_xticks | 返回数据坐标中xaxis的刻度位置。 |
Axes.set_xticklabels | 使用字符串标签列表设置xaxis的标签。 |
Axes.get_xticklabels | 获取xaxis的刻度标签。 |
Axes.get_xmajorticklabels | 返回xaxis的主要刻度标签,作为的列表Text。 |
Axes.get_xminorticklabels | 返回xaxis的次刻度标签,作为的列表Text。 |
Axes.get_xgridlines | 返回xaxis的网格线作为Line2Ds的列表。 |
Axes.get_xticklines | 以x的列表形式返回xaxis的刻度线Line2D。 |
Axes.xaxis_date | 设置轴刻度和标签,以将沿x轴的数据视为日期。 |
Axes.set_yticks | 设置yaxis的刻度位置。 |
Axes.get_yticks | 返回数据坐标中yaxis的刻度位置。 |
Axes.set_yticklabels | 使用字符串标签列表设置yaxis标签。 |
Axes.get_yticklabels | 获取yaxis的刻度标签。 |
Axes.get_ymajorticklabels | 返回yaxis的主要刻度标签,作为的列表Text。 |
Axes.get_yminorticklabels | 返回yaxis的次要刻度标签,作为的列表Text。 |
Axes.get_ygridlines | 返回yaxis的网格线作为Line2Ds的列表。 |
Axes.get_yticklines | 返回yaxis的刻度线作为Line2Ds的列表。 |
Axes.yaxis_date | 设置轴刻度和标签,以将沿y轴的数据视为日期。 |
Axes.minorticks_off | 去除轴上的细小滴答声。 |
Axes.minorticks_on | 在轴上显示较小的刻度。 |
Axes.ticklabel_format | 配置ScalarFormatter默认情况下用于线性轴。 |
Axes.tick_params | 更改刻度线,刻度线标签和网格线的外观。 |
Axes.set_major_locator(self, locator) | 设定刻度位置。locator : ~matplotlib.ticker.Locator |
- ticks:此参数是x轴刻度位置的列表。
- minor:此参数用于设置主要刻度线还是设置次要刻度线
- labels:此参数是字符串标签的列表。
- fontdict:此参数是控制刻度标签外观的字典。
默认值方块是:{‘fontsize’: rcParams[‘axes.titlesize’],
‘fontweight’: rcParams[‘axes.titleweight’],
‘verticalalignment’: ‘baseline’,
‘horizontalalignment’: loc} - minor:默认值:False,是否设置次要刻度线标签而不是主要刻度线标签。
import numpy as np
import matplotlib.pyplot as pltdef main():
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(np.random.randn(1000).cumsum())
ticks = ax.set_xticks([0, 250, 500, 750, 1000])
label = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'], rotation=30, fontsize='small')
ax.set_title('My')
ax.set_xlabel("Stages")
plt.show()if __name__ == '__main__':
main()
注解annotate annotate用于在图形上给数据添加文本注解,而且支持带箭头的划线工具,方便我们在合适的位置添加描述信息。
Axes.annotate(s, xy, *args, **kwargs)
- s:注释文本的内容
- xy:被注释的坐标点,二维元组形如(x,y)
- xytext:注释文本的坐标点,也是二维元组,默认与xy相同
- xycoords:被注释点的坐标系属性,允许输入的值如下
属性值 | 含义 |
---|---|
‘figure points’ | 以绘图区左下角为参考,单位是点数 |
‘figure pixels’ | 以绘图区左下角为参考,单位是像素数 |
‘figure fraction’ | 以绘图区左下角为参考,单位是百分比 |
‘axes points’ | 以子绘图区左下角为参考,单位是点数(一个figure可以有多个axex,默认为1个) |
‘axes pixels’ | 以子绘图区左下角为参考,单位是像素数 |
‘axes fraction’ | 以子绘图区左下角为参考,单位是百分比 |
‘data’ | 以被注释的坐标点xy为参考 (默认值) |
‘polar’ | 不使用本地数据坐标系,使用极坐标系 |
- textcoords :注释文本的坐标系属性,默认与xycoords属性值相同,也可设为不同的值。除了允许输入xycoords的属性值,还允许输入以下两种:
属性值 | 含义 |
---|---|
‘offset points’ | 相对于被注释点xy的偏移量(单位是点) |
‘offset pixels’ | 相对于被注释点xy的偏移量(单位是像素) |
- arrowprops:箭头的样式,dict(字典)型数据,如果该属性非空,则会在注释文本和被注释点之间画一个箭头。如果不设置’arrowstyle’ 关键字,则允许包含以下关键字:
关键字 | 含义 |
---|---|
width | 箭头的宽度(单位是点) |
headwidth | 箭头头部的宽度(点) |
headlength | 箭头头部的长度(点) |
shrink | 箭头两端收缩的百分比(占总长) |
? | 任何的关键字 |
箭头的样式 | 属性 |
---|---|
‘-’ | None |
‘->’ | head_length=0.4,head_width=0.2 |
‘-[’ | widthB=1.0,lengthB=0.2,angleB=None |
’ | - |
'- | >’ |
‘<-’ | head_length=0.4,head_width=0.2 |
‘<->’ | head_length=0.4,head_width=0.2 |
'< | -’ |
'< | - |
‘fancy’ | head_length=0.4,head_width=0.4,tail_width=0.4 |
‘simple’ | head_length=0.5,head_width=0.5,tail_width=0.2 |
‘wedge’ | tail_width=0.3,shrink_factor=0.5 |
- annotation_clip : 布尔值,可选参数,默认为空。设为True时,只有被注释点在子图区内时才绘制注释;设为False时,无论被注释点在哪里都绘制注释。仅当xycoords为‘data’时,默认值空相当于True。
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# 绘制一个余弦曲线
t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = ax.plot(t, s, lw=2)
# 绘制一个黑色,两端缩进的箭头
ax.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
xycoords='data',
arrowprops=dict(facecolor='black', shrink=0.05)
)
ax.set_ylim(-2, 2)
plt.show()
文章图片
示例:用不同的坐标体系绘制注释
import numpy as np
import matplotlib.pyplot as plt
# 以步长0.005绘制一个曲线
x = np.arange(0, 10, 0.005)
y = np.exp(-x/2.) * np.sin(2*np.pi*x)
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlim(0, 10)
ax.set_ylim(-1, 1)
# 被注释点的数据轴坐标和所在的像素
xdata, ydata = https://www.it610.com/article/5, 0
xdisplay, ydisplay = ax.transData.transform_point((xdata, ydata))
# 设置注释文本的样式和箭头的样式
bbox = dict(boxstyle="round", fc="0.8")
arrowprops = dict(
arrowstyle = "->",
connectionstyle = "angle,angleA=0,angleB=90,rad=10")
# 设置偏移量
offset = 72
# xycoords默认为'data'数据轴坐标,对坐标点(5,0)添加注释
# 注释文本参考被注释点设置偏移量,向左2*72points,向上72points
ax.annotate('data = https://www.it610.com/article/(%.1f, %.1f)'%(xdata, ydata),
(xdata, ydata), xytext=(-2*offset, offset), textcoords='offset points',
bbox=bbox, arrowprops=arrowprops)
# xycoords以绘图区左下角为参考,单位为像素
# 注释文本参考被注释点设置偏移量,向右0.5*72points,向下72points
disp = ax.annotate('display = (%.1f, %.1f)'%(xdisplay, ydisplay),
(xdisplay, ydisplay), xytext=(0.5*offset, -offset),
xycoords='figure pixels',
textcoords='offset points',
bbox=bbox, arrowprops=arrowprops)
plt.show()
文章图片
示例:极坐标上的注释,在极坐标系绘图,并在极坐标系设置被注释点,以绘图区的百分比为参数放置注释文本。
import numpy as np
import matplotlib.pyplot as plt
# 绘制一个极地坐标,再以0.001为步长,画一条螺旋曲线
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
r = np.arange(0,1,0.001)
theta = 2 * 2*np.pi * r
line, = ax.plot(theta, r, color='#ee8d18', lw=3)
# 对索引为800处画一个圆点,并做注释
ind = 800
thisr, thistheta = r[ind], theta[ind]
ax.plot([thistheta], [thisr], 'o')
ax.annotate('a polar annotation',
xy=(thistheta, thisr),# 被注释点遵循极坐标系,坐标为角度和半径
xytext=(0.05, 0.05),# 注释文本放在绘图区的0.05百分比处
textcoords='figure fraction',
arrowprops=dict(facecolor='black', shrink=0.05),# 箭头线为黑色,两端缩进5%
horizontalalignment='left',# 注释文本的左端和低端对齐到指定位置
verticalalignment='bottom',
)
plt.show()
文章图片
鼠标滑过显示隐藏内容用annotate实现
- 创建[点,注释]对的列表,默认情况下,注释不可见
- 每次检测到鼠标移动时,都会注册一个函数“on_move”
- on_move函数遍历每个点和注释,如果鼠标现在位于其中一个点上,则使其关联的注释可见,如果不是,则使其不可见。
import matplotlib.pyplot as plt
fig = plt.figure()
po_annotation = []
for i in range(0, 10):
x = i
y = x**2
point, = plt.plot(x, y, 'o')
annotation = plt.annotate(('x='+str(x), 'y='+str(y)), xy=(x+0.1, y+0.1), xycoords='data', xytext=(x+0.7, y+0.7),
textcoords='data', horizontalalignment="left",
arrowprops=dict(arrowstyle="simple",connectionstyle="arc3,rad=-0.1"),
bbox=dict(boxstyle="round", facecolor="w",edgecolor="0.5", alpha=0.9)
)
annotation.set_visible(False)
po_annotation.append([point, annotation])
def on_move(event):
visibility_changed = False
for point, annotation in po_annotation:
should_be_visible = (point.contains(event)[0] == True)
# print(point.contains(event)[0])
if should_be_visible != annotation.get_visible():
visibility_changed = True
annotation.set_visible(should_be_visible)
if visibility_changed:
plt.draw()
on_move_id = fig.canvas.mpl_connect('motion_notify_event', on_move)
plt.show()
文章图片
推荐阅读
- leetcode|Leetcode 191. Number of 1 Bits (Python)
- Python|Python常用模块总结
- 机器学习|【重磅开源】一文汇总顶会 SOTA 图像恢复算法,包括图像去噪、去雨、去模糊等等...
- #yyds干货盘点#3. 无转折不编程,滚雪球学 Python
- #yyds干货盘点# 1. 这才是 Python 学习的正确起手姿势,滚雪球学 Python
- Python 了解 bytes 与 str 的区别
- python|Python实现学生信息管理系统
- python基础实战|Python实现的学生信息管理系统
- Python 进阶 — Flake8 静态代码检查工具