我在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
的文档有点含糊。
标记的颜色可以由c
,color
,edgecolor
和facecolor
定义。c
在scatter()
中的axes.py
的源代码中。那相当于facecolor
。使用c='r'
时,未定义edgecolor
,并且matplotlib.rcParams
中的默认值生效,其默认值为k
(黑色)。color
,edgecolor
和facecolor
传递给collection.Collection
对象scatter()
返回。正如您将在源代码collections.py
(set_color()
,set_edgecolor()
和set_facecolor()
方法)中看到的那样,set_color()
基本上调用了set_edgecolor
和set_facecolor
,因此将两个属性设置为相同的值。
我希望这些可以解释您在OP中描述的行为。如果是c='red'
,则边缘为黑色,面部颜色为红色。在color=red
的情况下,面部颜色和边缘颜色均为红色。