Matplotlob:绘制开放区间,将线连接到空圆

Foo*_*Bar 2 python matplotlib

我想绘制一条以空圆圈结尾的线。本质上是开放区间的可视化[0, 1)我的尝试是:

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 1, 20)
y = 1 + x*2
l, = plt.plot(x[:-1], y[:-1])
plt.scatter(x[-1], y[-1], marker='o', facecolor='none', edgecolor=l.get_color())
Run Code Online (Sandbox Code Playgroud)

不幸的是,这条线没有连接到圆圈。或者,我可以绘制所有plt.plot(x, y),但该线在圆圈内。什么是绘制它的好方法,使线恰好接触圆并且不会走得更远?

我正在寻找一种方法,允许我为其他行重现此方法,并且不需要对每个用例进行大量微调。

cht*_*mon 5

这里的一个技巧是用白色背景绘制并提高 z 顺序将绘制在线上方的圆圈:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 1, 20)
y = 1 + x*2

l, = plt.plot(x, y)  # Change: plot whole series
plt.scatter(
    x[-1], y[-1], marker='o', 
    facecolor='white',  # Change: to opaque color
    edgecolor=l.get_color(),  
    linewidth=l.get_linewidth(),  # Change: match line width
    zorder=10  # Change: raise to higher level.
)
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是使用较新的markevery 选项来指定标记作为列表的位置。这样我们就可以使用单个绘图调用:

plt.plot(x, y, 'o', 
         linestyle='-', 
         markevery=[-1], 
         markerfacecolor='white', 
         markeredgewidth=1.5)
Run Code Online (Sandbox Code Playgroud)

结果:

结果