Python matplotlib';s散射是'c',但'color'也适用;生产差异结果
我无意中使用了Python matplotlib';s散射是'c',但'color'也适用;生产差异结果,python,matplotlib,Python,Matplotlib,我无意中使用了color而不是c作为matplotlib散点图中的颜色参数(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].
color
而不是c
作为matplotlib散点图中的颜色参数(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()
这不是一个bug,但在我看来,
matplotlib
的文档有点含糊不清
标记的颜色可以由c
、color
、edgecolor
和facecolor
定义
c
位于axes.py中的scatter()
的源代码中。这相当于facecolor
。使用c='r'
时,edgecolor
未定义,并且matplotlib.rcParams
中的默认值生效,默认值为k
(黑色)
color
、edgecolor
和facecolor
被传递到集合。集合对象scatter()
返回。正如您将在源代码collections.py
(set\u color()
,set\u edgecolor()
和set\u facecolor()
方法)中看到的,set\u color()
基本上调用set\u edgecolor
和set\u facecolor>,因此将这两个属性设置为相同的值
我希望这些可以解释你在OP中描述的行为。在c='red'
的情况下,边缘是黑色,面部颜色是红色。在color=red
的情况下,面部颜色和边缘颜色都是红色的。非常好的解释!谢谢+同样值得一提的是,c
与facecolor
并不完全等同。c
参数意味着(除其他外)允许将标记的颜色映射到一个值数组,而facecolor
,color
,等等,不允许这样做。嗨,@JoeKington,事实上在新版本(>1.3.1)中不再是这种情况,在OP中的示例中,您现在可以传递,例如,facecolor=matplotlib.cm.jet(示例)[:,1,:]
或c=matplotlib.cm.jet(示例)[:,1,:]
以获得一袋彩色点。干杯