我有一个散点图,其中数据集的符号根据某种颜色比例着色。我想通过在这些点周围画一圈空心圆并用线连接它们来突出显示其中几个点。换句话说,在一个非常简化的示例中,我希望结果看起来像这样:
.
使用以下代码,我可以制作一个类似的图表:
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(5,5))
X, Y = np.meshgrid(np.arange(10), np.arange(10))
Z = X**2 + Y**2
plt.scatter(X,Y,c=Z, s=300, cmap='viridis_r')
plt.plot([1, 4, 7], [7, 1, 4], 'k-o', linewidth=3,
markersize=14, markerfacecolor='none', markeredgewidth=2,
)
然而,结果看起来像这样:
.
我希望,在标记符号内部的线段被隐藏不可见。这是因为我想要吸引人们注意特定的数据点,并且不想将它们部分遮挡。
解决方法可能包括:
- 复制我想突出显示的数据点,并使用与原始符号完全相同的颜色填充标记。这不令人满意,因为(a) 我不总是能够访问数据,只能访问输出的图或轴实例,以及(b) 我不知道如何在半透明符号的情况下做到这一点,这是我的实际数据集中的情况。
- 手动计算适应坐标,使连接器线只达到标记的边缘。这似乎也不是很令人满意(鉴于轴和符号的坐标系统将不相同,我也不知道该怎么做)。
我的问题是:最好的解决方法是什么?是否存在比上述选项1和2更好的方法,如果没有,那么最好的方法是什么?正如我所说,对于1,我预见到透明度方面会有问题(我正在使用),而对于2,我预见到坐标系统方面可能存在问题,例如在缩放时等等。
(我的另一个小观察是,我对示例中的以下事情感到有些困惑:plt.plot
和plt.scatter
似乎没有在完全相同的位置绘制东西(请参见此图),并且大小定义不一致)