Python Matplotlib:使用开放标记打印线,其中线在标记中不可见
我有一个散点图,显示了一个数据集,其中的符号根据某种颜色比例着色。我想突出其中几个点,在它们周围画一个开放的圆圈,并用一条线连接它们。换句话说,在一个非常简化的示例中,我希望结果如下所示: 我可以使用以下代码绘制一个有点像这样的图:Python Matplotlib:使用开放标记打印线,其中线在标记中不可见,python,matplotlib,plot,Python,Matplotlib,Plot,我有一个散点图,显示了一个数据集,其中的符号根据某种颜色比例着色。我想突出其中几个点,在它们周围画一个开放的圆圈,并用一条线连接它们。换句话说,在一个非常简化的示例中,我希望结果如下所示: 我可以使用以下代码绘制一个有点像这样的图: import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(5,5)) X, Y = np.meshgrid(np.arange(10), np.aran
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,
)
但是,结果如下所示:
我想要的是,将标记符号内的线段从视图中隐藏。这是因为我有兴趣将注意力吸引到特定的数据点上,并且不想部分地将它们隐藏起来
解决办法是:
(我的例子中的另一个我有点困惑的小观察:
plt.plot
和plt.scatter
似乎没有在完全相同的位置绘制东西(),而且大小定义也不一致)您想要得到透明(开放)的圆,在数据坐标中定位,但以点为半径。您希望将圆彼此连接起来,而不是将圆心连接起来。这意味着您不能使用普通线。相反,几个ConnectionPatch
es可能会有所帮助。您可以将它们缩小一半的标记大小,使它们接触到圆的边界
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import ConnectionPatch
fig, ax = plt.subplots(figsize=(5,5))
X, Y = np.meshgrid(np.arange(10), np.arange(10))
Z = X**2 + Y**2
ax.scatter(X,Y,c=Z, s=300, cmap='viridis_r')
xc = [1, 4, 7]
yc = [7, 1, 4]
ax.plot(xc, yc, linewidth=0, marker="o", color="black",
markersize=np.sqrt(300), markerfacecolor='none', markeredgewidth=3)
for i in range(len(xc)-1):
cp = ConnectionPatch((xc[i],yc[i]), (xc[i+1], yc[i+1]),
coordsA='data', coordsB='data', axesA=ax, axesB=ax,
shrinkA=np.sqrt(300)/2, shrinkB=np.sqrt(300)/2,
linewidth=2)
ax.add_patch(cp)
plt.show()