如何在Python中用空圆圈进行散点图?
-
30-09-2019 - |
题
在Python,与Matplotlib一起,如何与 空的 绘制圆圈?目标是在周围抽空 一些 已经绘制的有色磁盘 scatter()
, ,以突出显示它们,理想情况下,不必重新绘制彩色圆圈。
我试过 facecolors=None
, ,无济于事。
解决方案
来自 文档 散布:
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()
笔记: 对于其他类型的地块,请参见 这个帖子 关于使用 markeredgecolor
和 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
这可以更好地控制标记的填充方式。就我而言,我已将其用于errorbars,但通常适用于标记http://matplotlib.org/api/_as_gen/matplotlib.axes.axes.axes.errorbar.html
fillstyle
接受以下值:['full'| “左” | '对'| “底部” | '顶'| '没有任何'
使用时有两个重要的事情要牢记 fillstyle
,
1)如果将MFC设置为任何类型的值,则将优先考虑,因此,如果您确实将FillStyle设置为“无”,则不会生效。因此,避免使用Fillstyle的MFC
2)您可能需要控制标记边缘宽度(使用 markeredgewidth
或者 mew
),因为如果标记相对较小并且边缘宽度较厚,那么标记即使没有填充,也会看起来像填充。
以下是使用errorbars的示例:
myplot.errorbar(x=myXval, y=myYval, yerr=myYerrVal, fmt='o', fillstyle='none', ecolor='blue', mec='blue')
因此,我认为您想突出一些符合某些标准的要点。您可以使用Prelude的命令来用空圆圈和第一个呼叫来绘制所有要点的命中点的第二个散点图。确保S参数足够小,以使较大的空圆圈包围较小的圆圈。
另一个选项是不使用散射,并使用Circle/Ellipse命令单独绘制补丁。这些在matplotlib.patches中, 这里 是关于如何绘制圆形矩形等的一些示例代码。