2014-07-15 41 views
5

我偶然使用color而不是c作爲matplotlib散點圖中的顏色參數(c在文檔中列出)它可以工作,但結果是不同的:默認情況下邊緣顏色消失。現在,我想知道,如果這是期望的行爲,以及如何以及爲什麼這個工程...matplotlib分散的顏色參數是`c`,但`color`也可以;刺。差異。結果

enter image description here

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() 

回答

3

這是不是一個錯誤,但IMO,matplotlib的文件的一點不含糊。

標記的顏色可以由c,coloredgecolorfacecolor定義。

c的源代碼在scatter()axes.py。這相當於facecolor。當您使用c='r'時,edgecolor未定義,並且matplotlib.rcParams中的默認值生效,其默認值爲k(黑色)。

coloredgecolorfacecolor被傳遞給collection.Collection對象scatter()返回。正如你將在源代碼中看到collections.pyset_color()set_edgecolor()set_facecolor()方法),set_color()基本要求set_edgecolorset_facecolor,因此設置兩個屬性相同的值。

這些我希望應該解釋你在OP中描述的行爲。在c='red'的情況下,邊緣是黑色的,臉部顏色是紅色的。在color=red的情況下,臉部顏色和邊緣顏色都是紅色。

+0

非常好的解釋!謝謝! – Sebastian

+0

+1值得一提的是,'c'不完全等同於'facecolor'。 'c'參數意味着(除其他外)允許將標記的顏色映射到一個值數組,而'facecolor','color'等不允許使用它。 –

+0

嗨,@JoeKington,實際上在新版本(> 1.3.1)中不再是這種情況,在OP的例子中,你現在可以通過,例如'facecolor = matplotlib.cm.jet(samples)[ :,1,:]'或'c = matplotlib.cm.jet(樣本)[:,1,:]'以得到一袋彩色圓點。乾杯! –

相關問題