备注
Go to the end 下载完整的示例代码.
Markevery 演示#
Line2D 的 markevery 属性允许在数据点的子集上绘制标记.
可能参数的列表在 Line2D.set_markevery 中指定.简而言之:
单个整数 N 绘制每 N 个标记.
整数元组(start,N)从数据索引 start 开始绘制每 N 个标记.
整数列表在指定的索引处绘制标记.
切片在切片的索引处绘制标记.
浮点数指定标记之间的距离,作为屏幕空间中坐标轴对角线的一小部分.这将导致点沿线在视觉上均匀分布,而与比例和缩放无关.
import matplotlib.pyplot as plt
import numpy as np
# define a list of markevery cases to plot
cases = [
None,
8,
(30, 8),
[16, 24, 32],
[0, -1],
slice(100, 200, 3),
0.1,
0.4,
(0.2, 0.4)
]
# data points
delta = 0.11
x = np.linspace(0, 10 - 2 * delta, 200) + delta
y = np.sin(x) + 1.0 + delta
具有线性比例的 markevery#
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained')
for ax, markevery in zip(axs.flat, cases):
ax.set_title(f'markevery={markevery}')
ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)
![markevery=None, markevery=8, markevery=(30, 8), markevery=[16, 24, 32], markevery=[0, -1], markevery=slice(100, 200, 3), markevery=0.1, markevery=0.4, markevery=(0.2, 0.4)](../../_images/sphx_glr_markevery_demo_001.png)
具有对数比例的 markevery#
请注意,当使用整数对数据进行二次采样时,对数比例会导致标记距离在视觉上不对称.相反,基于图形尺寸的分数进行二次采样会产生均匀的分布,因为它基于坐标轴对角线的分数,而不是基于数据坐标或数据索引.
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained')
for ax, markevery in zip(axs.flat, cases):
ax.set_title(f'markevery={markevery}')
ax.set_xscale('log')
ax.set_yscale('log')
ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)
![markevery=None, markevery=8, markevery=(30, 8), markevery=[16, 24, 32], markevery=[0, -1], markevery=slice(100, 200, 3), markevery=0.1, markevery=0.4, markevery=(0.2, 0.4)](../../_images/sphx_glr_markevery_demo_002.png)
缩放图上的 markevery#
基于整数的 markevery 规范从底层数据中选择点,并且与视图无关.相反,基于浮点数的规范与坐标轴对角线有关.虽然缩放不会改变坐标轴对角线,但它会改变显示的数据范围,并且在缩放时会显示更多点.
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained')
for ax, markevery in zip(axs.flat, cases):
ax.set_title(f'markevery={markevery}')
ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)
ax.set_xlim((6, 6.7))
ax.set_ylim((1.1, 1.7))
![markevery=None, markevery=8, markevery=(30, 8), markevery=[16, 24, 32], markevery=[0, -1], markevery=slice(100, 200, 3), markevery=0.1, markevery=0.4, markevery=(0.2, 0.4)](../../_images/sphx_glr_markevery_demo_003.png)
极坐标图上的 markevery#
r = np.linspace(0, 3.0, 200)
theta = 2 * np.pi * r
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained',
subplot_kw={'projection': 'polar'})
for ax, markevery in zip(axs.flat, cases):
ax.set_title(f'markevery={markevery}')
ax.plot(theta, r, 'o', ls='-', ms=4, markevery=markevery)
plt.show()
脚本的总运行时间:(0 分 10.781 秒)