Markevery 示範#

Line2Dmarkevery 屬性允許在資料點的子集中繪製標記。

可能參數的清單在 Line2D.set_markevery 中指定。簡而言之

  • 單個整數 N 會繪製每第 N 個標記。

  • 整數元組 (start, N) 會繪製每第 N 個標記,從資料索引 start 開始。

  • 整數清單會在指定的索引處繪製標記。

  • 切片會在切片的索引處繪製標記。

  • 浮點數會以螢幕空間中軸對角線的一部分指定標記之間的距離。這將導致點沿線視覺均勻分佈,而與刻度和縮放無關。

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)

具有對數刻度的 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)

縮放圖上的 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)

極座標圖上的 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()
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)

標籤:元件:標記 繪圖類型:線條 等級:初學者

腳本的總執行時間: (0 分鐘 12.695 秒)

由 Sphinx-Gallery 產生的圖庫