在Python中,使用Matplotlib,如何绘制带有空圆圈的散点图? 目标是围绕已由 scatter()
绘制的
some彩色圆盘绘制空圆圈,以便突出显示它们,理想情况下无需重新绘制彩色圆圈。
我尝试了
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"
)。
基于 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()
在 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) 您可能想要控制标记边缘宽度(使用
markeredgewidth
或 mew
),因为如果标记相对较小且边缘宽度较厚,则标记看起来像是已填充的,即使实际上并非如此。
以下是使用错误栏的示例:
myplot.errorbar(x=myXval, y=myYval, yerr=myYerrVal, fmt='o', fillstyle='none', ecolor='blue', mec='blue')
所以我假设您想强调一些符合特定标准的要点。您可以使用 Prelude 的命令使用空圆圈对突出显示的点进行第二次散点图,并第一次调用以绘制所有点。确保 s 参数足够小,以便较大的空心圆能够包围较小的实心圆。
另一个选项是不使用散点图并使用圆/椭圆命令单独绘制面片。这些在 matplotlib.patches 中,这里是一些关于如何绘制圆形矩形等的示例代码。
如果您在误差条图中寻找空圆圈。
plt.errorbar(fmt='o', color='C0', mfc= "None")