如何用Python中的空圈做散点图?

在Python中,使用Matplotlib,如何绘制圆的散点图? 我们的目标是在已经被scatter()绘制的一些彩色磁盘周围绘制空的圆,以便突出显示它们,理想情况下无需重画彩色圆圈。

从分散的文档 :

 Optional kwargs control the Collection properties; in particular: edgecolors: The string 'none' to plot faces with no outlines facecolors: The string 'none' to plot unfilled outlines 

尝试以下操作:

 import matplotlib.pyplot as plt import numpy as np x = np.random.randn(60) y = np.random.randn(60) plt.scatter(x, y, s=80, facecolors='none', edgecolors='r') plt.show() 

示例图像

注意:对于其他types的情节,请参阅使用markeredgecolormarkerfacecolormarkeredgecolor markerfacecolor

这些工作?

 plt.scatter(np.random.randn(100), np.random.randn(100), facecolors='none') 

示例图像

或使用plot()

 plt.plot(np.random.randn(100), np.random.randn(100), 'o', mfc='none') 

示例图像

另一种方法是:在当前坐标轴上添加一个圆,绘图或图像等等:

 from matplotlib.patches import Circle # $matplotlib/patches.py def circle( xy, radius, color="lightsteelblue", facecolor="none", alpha=1, ax=None ): """ add a circle to ax= or current axes """ # from .../pylab_examples/ellipse_demo.py e = Circle( xy=xy, radius=radius ) if ax is None: ax = pl.gca() # ax = subplot( 1,1,1 ) ax.add_artist(e) e.set_clip_box(ax.bbox) e.set_edgecolor( color ) e.set_facecolor( facecolor ) # "none" not None e.set_alpha( alpha ) 

替代文字

(因为imshow aspect="auto" ,图片中的圆圈被压扁以省略)。

在matplotlib 2.0中有一个名为fillstyle的参数,可以更好地控制填充标记的方式。 在我的情况下,我用它与错误栏,但它的标记一般http://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.errorbar.html

fillstyle接受以下值:['full'| 'left'| 'right'| 'bottom'| 'top'| '没有']

使用fillstyle时要记住两件重要的事情,

1)如果mfc被设置为任何types的值,将优先考虑,因此,如果将fillstyle设置为“none”,则不会生效。 所以避免与fillstyle一起使用mfc

2)您可能需要控制标记边缘宽度(使用markeredgewidthmew ),因为如果标记相对较小且边缘宽度较厚,则即使标记不是,标记也会显示为填充。

以下是使用错误栏的示例:

 myplot.errorbar(x=myXval, y=myYval, yerr=myYerrVal, fmt='o', fillstyle='none', ecolor='blue', mec='blue') 

所以我假设你想突出一些符合一定标准的要点。 你可以使用Prelude的命令来做一个空圈的第二个散点图,第一个调用绘制所有的点。 确保s参数对于较大的空圆来说足够小,以包围较小的圆。

另一种select是不使用散点图和使用circle / ellipse命令分别绘制补丁。 这些是在matplotlib.patches, 这里是一些示例代码如何画圆圈矩形等