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

时间:2010-11-10 10:34:09

标签: python matplotlib geometry scatter-plot scatter

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

我试过facecolors=None,但没有用。

6 个答案:

答案 0 :(得分:191)

来自散布的documentation

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()

example image

注意:对于其他类型的地块,请参阅使用markeredgecolormarkerfacecolor的{​​{3}}。

答案 1 :(得分:59)

这些会有用吗?

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

example image

或使用plot()

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

example image

答案 2 :(得分:14)

这是另一种方式:这会为当前轴,图或图像或其他任何内容添加一个圆圈:

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 )

alt text

(图片中的圆圈被压缩为椭圆形,因为imshow aspect="auto")。

答案 3 :(得分:4)

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

fillstyle接受以下值:['full'| '左'| '对'| '底'| '顶'| “无”]

使用fillstyle

时,请注意两件重要事项

1)如果mfc设置为任何类型的值,它将优先,因此,如果你确实将fillstyle设置为'none',它将不会生效。 因此,避免将mfc与fillstyle结合使用

2)您可能希望控制标记边缘宽度(使用markeredgewidthmew),因为如果标记相对较小且边缘宽度较厚,即使标记看起来像填充他们不是。

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

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

答案 4 :(得分:1)

所以我假设你想突出一些符合某个标准的点。您可以使用Prelude的命令使用空圆圈和第一次调用绘制所有点来执行高亮点的第二个散点图。确保s参数足够小,以便较大的空圆圈包围较小的空圆圈。

另一个选项是不使用散射并使用circle / ellipse命令单独绘制补丁。这些是在matplotlib.patches中,here是关于如何绘制圆形矩形等的示例代码。

答案 5 :(得分:-1)

根据加里·克尔(Gary Kerr)的示例,并按照here的建议,可以使用以下代码创建与指定值相关的空圆:

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.markers import MarkerStyle

x = np.random.randn(60) 
y = np.random.randn(60)
z = np.random.randn(60)

g=plt.scatter(x, y, s=80, c=z)
g.set_facecolor('none')
plt.colorbar()
plt.show()