У меня есть матрица Nx2 X
и N-тусклый вектор меток y
.Например:
from sklearn.datasets.samples_generator import make_blobs
import matplotlib.pyplot as plt
X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=2)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolor='k')
plt.show()
На фоне этого графика я хочу построить две тепловые карты с цветовой картой, в которой цвет точки отображается назоны с высокой плотностью точек, так что изображение выглядит как фиолетовое и желтое облако, каждое из которых сосредоточено на фиолетовых и желтых каплях.
Это было непросто для меня.Я попытался создать двухмерную гистограмму для каждого большого двоичного объекта, как показано в этом ответе, а также создал собственную цветовую карту, чтобы области с низкой плотностью на графике были белыми, а области с высокой плотностью окрашивались в цвет этого большого объекта.:
import numpy as np
import seaborn as sns
from matplotlib.colors import ListedColormap
palette_colors = sns.color_palette("deep")
palette = sns.light_palette(palette_colors[0], input="husl", n_colors=100)
my_cmap = ListedColormap(sns.color_palette(palette).as_hex())
whr1 = np.where(y==0)
whr2 = np.where(y==1)
x1 = X[whr1][:, 0]
y1 = X[whr1][:, 1]
x2 = X[whr2][:, 0]
y2 = X[whr2][:, 1]
heatmap1, xedges1, yedges1 = np.histogram2d(x1, y1, bins=50)
extent1 = [xedges1[0], xedges1[-1], yedges1[0], yedges1[-1]]
heatmap2, xedges2, yedges2 = np.histogram2d(x2, y2, bins=50)
extent2 = [xedges2[0], xedges2[-1], yedges2[0], yedges2[-1]]
Но сейчас я не знаю, как построить эти тепловые карты с помощью imshow.Я также хочу удостовериться, что, если капли перекрываются, то будут и тепловые карты, так что одна тепловая карта не покрывает другую тепловую карту, а скорее будет комбинация цветов и интенсивностей тепловых карт в перекрывающейся области.
Я очень ценю вашу помощь!