您還可以通過先計算着色點散射分佈的核密度估計,以及使用密度值爲散射的每個點指定顏色。修改代碼在前面的示例:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde as kde
from matplotlib.colors import Normalize
from matplotlib import cm
N = 10000
mean = [0,0]
cov = [[2,2],[0,2]]
samples = np.random.multivariate_normal(mean,cov,N).T
densObj = kde(samples)
def makeColours(vals):
colours = np.zeros((len(vals),3))
norm = Normalize(vmin=vals.min(), vmax=vals.max())
#Can put any colormap you like here.
colours = [cm.ScalarMappable(norm=norm, cmap='jet').to_rgba(val) for val in vals]
return colours
colours = makeColours(densObj.evaluate(samples))
plt.scatter(samples[0], samples[1], color=colours)
plt.show()

我前一陣子,得知這一招時,我注意到了散射函數的文檔 -
c : color or sequence of color, optional, default : 'b'
c
能是單一顏色格式字符串或長度爲N
的顏色規格序列或要映射到列的一系列N
號碼或使用通過kwargs指定的cmap
和norm
(見下文)。請注意,c
不應該是單個數字RGB或RGBA序列,因爲它與要進行彩色映射的值數組難以區分。 c
可以是其中行是RGB或RGBA的二維數組,但是,包括單行的情況以指定所有點的相同顏色。
爲什麼不使用兩種顏色的直方圖?它看起來不夠好嗎? –
@OfirIsrael我曾嘗試使用histogram2d和與alpha級別imshow有兩個重疊的直方圖,但結果似乎很差 – markusian
您是否嘗試使用輪廓而不是alpha混合顯示直方圖? http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.contour – grep