当 edgecolor = 'none' 时 Matplotlib 标记消失

Posted

技术标签:

【中文标题】当 edgecolor = \'none\' 时 Matplotlib 标记消失【英文标题】:Matplotlib markers disappear when edgecolor = 'none'当 edgecolor = 'none' 时 Matplotlib 标记消失 【发布时间】:2012-04-18 13:26:15 【问题描述】:

我正在尝试制作一些 PCA 数据的散点图。我做了一些非常典型的代码:

plt.plot(pca[:,0], pca[:,1], '.',ms=3,  markerfacecolor = self.colors[k],
            markeredgecolor = 'none')

我希望它只显示没有轮廓的标记面颜色。问题是当 markeredgecolor = 'none' 时标记完全消失。当我将 markerfacecolor='none' 或设置为一种颜色并删除 markeredgecolor 时,它会像预期的那样工作。

我刚刚将 matplotlib、numpy 等更新到最新版本,在 Python 2.7 上运行。

感谢您的帮助。

【问题讨论】:

您可以尝试将markersize 设置为更大的值。 markersize 可以是 plot() 的 kwarg,也可以缩写为 ms。例如:..., markersize=20, ... 对于那些试图通过matplotlib.errorbar 使用下面推荐的markeredgecolor=None 来执行此操作的人并没有删除黑色轮廓符号。取而代之的是markeredgecolor='none'did 工作(符号不是不可见的)。毫不奇怪,导致这个问题的错误似乎在过去 3 年中已经修复。 【参考方案1】:

试试这个:

x = np.array(np.random.rand(10))
y = np.array(np.random.rand(10))
c = np.arange(len(x))
plt.scatter(x,y, c=c, s=500, cmap = plt.cm.Paired, alpha = 0.5,linewidths=0)

或者,这也是一个不错的选择:

plt.scatter(x,y, c=c, s=500, cmap = plt.cm.Paired, alpha = 0.5,edgecolor='face')

【讨论】:

【参考方案2】:

在 matplotlib 1.1 中

>> plt.plot(pca[:,0], pca[:,1], '.', ms=3, markerfacecolor=self.colors[k],
...          markeredgecolor=None)

有效(注意 None 而不是 markeredgecolor 的 'none')。

设置 markeredgewidth=0.0markeredgecolor=self.colors[k](由 Joe Kington 建议)也应该有效。

【讨论】:

self.colors[k] 是什么意思?当我运行类似的代码时,它会显示NameError: name 'self' is not defined 取自问题。似乎 OP 在一个类中使用这个命令,它有一个颜色属性(这是一个字典)。如果您只想使用代码行来绘制某些内容,则可以将其替换为任何 matplotlib 颜色(例如,像“绿色”这样的字符串)。 目前(较新的matplotlib),应该使用markedgecolor="None",见answer。【参考方案3】:

我认为这是几个月前修复的错误:https://github.com/matplotlib/matplotlib/pull/598

无论标记有多大,或者使用 marker='o' 而不是 '.',如果使用 markeredgecolor='none',它们都将不可见。

作为一种解决方法,您可以将边缘颜色设置为与面部颜色相同。

【讨论】:

以上是关于当 edgecolor = 'none' 时 Matplotlib 标记消失的主要内容,如果未能解决你的问题,请参考以下文章

图形对象figure

matplotlib学习

001.matplotlib.pyplot入门

Python之matplotlib

使用matplotlib中scatter()绘制散点图

Matlab中如何将surf得到的三维图与它在xy的投影图同在同一坐标下?