我在matplotlib的散点图中意外地使用了color而不是c作为颜色参数(c在文档中列出了)。它起作用了,但是结果却不同了:默认情况下边缘颜色消失了。现在,我想知道这是否是理想的行为,以及它如何以及为什么起作用……

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(10,10))

samples = np.random.randn(30,2)

ax[0][0].scatter(samples[:,0], samples[:,1],
            color='red',
            label='color="red"')

ax[1][0].scatter(samples[:,0], samples[:,1],
            c='red',
            label='c="red"')

ax[0][1].scatter(samples[:,0], samples[:,1],
            edgecolor='white',
            c='red',
            label='c="red", edgecolor="white"')

ax[1][1].scatter(samples[:,0], samples[:,1],
            edgecolor='0',
            c='1',
            label='color="1.0", edgecolor="0"')

for row in ax:
    for col in row:
        col.legend(loc='upper left')

plt.show()

最佳答案

这不是错误,而是IMO,matplotlib的文档有点含糊。

标记的颜色可以由ccoloredgecolorfacecolor定义。
cscatter()中的axes.py的源代码中。那相当于facecolor。使用c='r'时,未定义edgecolor,并且matplotlib.rcParams中的默认值生效,其默认值为k(黑色)。
coloredgecolorfacecolor传递给collection.Collection对象scatter()返回。正如您将在源代码collections.py(set_color()set_edgecolor()set_facecolor()方法)中看到的那样,set_color()基本上调用了set_edgecolorset_facecolor,因此将两个属性设置为相同的值。

我希望这些可以解释您在OP中描述的行为。如果是c='red',则边缘为黑色,面部颜色为红色。在color=red的情况下,面部颜色和边缘颜色均为红色。

10-06 05:18