我正在嘗試使用matplotlib製作一個散點圖,其中包含非常小的灰點。由於點密度,點數需要很小。問題是scatter()函數的標記似乎既有行又有填充。當標記很小時,只有線是可見的,而不是填充,並且線不是正確的顏色(它總是黑色的)。matplotlib中的小散點圖標記始終爲黑色
我可以得到正是我想要使用什麼gnuplot的:陰謀「節點」與點數PT 0 LC RGB「灰色」
我怎樣才能讓使用matplotlib散點圖非常小灰點()?
我正在嘗試使用matplotlib製作一個散點圖,其中包含非常小的灰點。由於點密度,點數需要很小。問題是scatter()函數的標記似乎既有行又有填充。當標記很小時,只有線是可見的,而不是填充,並且線不是正確的顏色(它總是黑色的)。matplotlib中的小散點圖標記始終爲黑色
我可以得到正是我想要使用什麼gnuplot的:陰謀「節點」與點數PT 0 LC RGB「灰色」
我怎樣才能讓使用matplotlib散點圖非常小灰點()?
scatter([1,2,3], [2,4,5], s=1, facecolor='0.5', lw = 0)
這設置markersize爲1(S = 1),則facecolor爲灰色(facecolor = '0.5'),以及線寬爲0(LW = 0)。
如果標記沒有面子(不能填充,例如'+'
,'x'
),那麼edgecolor
必須被替代設置的c
,並lw
不應該0
:
scatter([1,2,3], [2,4,5], marker='+', edgecolor='r')
以下將不工作
scatter([1,2,3], [2,4,5], s=1, marker='+', facecolor='0.5', lw = 0)
因爲邊緣/線條不會顯示,所以什麼都不會顯示。
有用瞭解。 Doc不包括這一點。 – smci
着色邊緣是比沒有顯示更好的解決方案。很難找到,因爲matplotlib文檔提到錯誤的「markeredgecolor」而不是正確的「edgecolor」 – user989762
從pandas DataFrame調用'plot.scatter'時,截至2017年12月,'markeredgecolor'和'edgecolor'都不是有效的參數。 – bli
對於您的問題,絕對最簡單的答案是:使用參數color
而不是參數c
來設置整個標記的顏色。
很容易看出差別,當你比較的結果:
from matplotlib import pyplot as plt
plt.scatter([1,2,3], [3,1,2], c='0.8') # marker not all gray
plt.scatter([1,2,3], [3,1,2], color='0.8') # marker all gray
詳情: 爲您簡單的例子,你只是想使你的整個標誌是灰顏色的色光不變,你真的不應該擔心諸如臉部顏色和邊緣顏色之類的東西,以及你的標記是被定義爲所有邊緣還是某些邊緣和一些填充。相反,只需使用color
參數,並知道您的整個標記將被設置爲您指定的單一顏色!
當顏色是「要映射的值序列」(即,不是固定參數,而是您正在繪製的變量之一)時,這不起作用。您會收到一條錯誤消息,告訴您非常明確地使用'c ='來代替。當顏色是一個變量時,你知道如何得到'color ='的效果嗎? – zwol
爲了迴應zwol的評論問題 - 我的聲望不夠高,不足以留下評論,所以必須這樣做:如果您的顏色來自顏色映射(即,是從一系列值到映射「),可以使用color =
,如下所示:
from matplotlib import pyplot
x = [1,5,8,9,5]
y = [4,2,4,7,9]
numSides = [2,3,1,1,5]
cmap = pyplot.cm.get_cmap("copper_r")
min, max = min(numSides), max(numSides)
for i in range(len(x)):
if numSides[i] >= 2:
cax = pyplot.scatter(x[i], y[i], marker = '+', s = 100, c = numSides[i], cmap = cmap)
cax.set_clim(min, max)
elif numSides[i] == 1:
pyplot.scatter(x[i], y[i], marker = '.', s = 40, color = cmap(numSides[i]))
fig = pyplot.gcf()
fig.set_size_inches(8.4, 6)
fig.savefig('figure_test.png', dpi = 200)
pyplot.show()
這工作,但它更普遍設置'edgecolor'爲'‘’'的原因,對方的回答中提到。 – kwinkunks
實際上,在較新版本的Matplotlib中(與在2011年當問題被問到時的版本相反),您可以使用關鍵字'color'來同時設置edgecolor和facecolor。然而,該功能沒有記錄,建議進行折舊,並與「繪圖」行爲發生衝突,其中「顏色」僅設置linecolor和fillcolor,而不設置edgecolor。 – Daan