matplotlib散点图的颜色参数是`c`,但`color`也适用; 刺.差异.结果

5 python matplotlib

我偶然在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()
Run Code Online (Sandbox Code Playgroud)

CT *_*Zhu 6

这不是一个错误,但在我看来,matplotlib的文档有点含糊不清。

标记的颜色可以通过ccoloredgecolor来定义facecolor

cscatter()位于的源代码中axes.py。这相当于facecolor. 当您使用c='r', 时,edgecolor未定义,默认值matplotlib.rcParams生效,默认值为k(黑色)。

coloredgecolor并且facecolor被传递给collection.Collection对象scatter()返回。正如您将在源代码collections.pyset_color()和方法)中看到的那样,基本上调用和,因此将两个属性设置set_edgecolor()为相同的值。set_facecolor()set_color()set_edgecolorset_facecolor

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