我想绘制一条以空圆圈结尾的线。本质上是开放区间的可视化[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),但该线在圆圈内。什么是绘制它的好方法,使线恰好接触圆并且不会走得更远?
我正在寻找一种方法,允许我为其他行重现此方法,并且不需要对每个用例进行大量微调。
这里的一个技巧是用白色背景绘制并提高 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)
结果: