Контурная диаграмма многомерного распределения - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть матрица данных (Xa.shape = 100x2), относящаяся к классу A, и еще одна для класса B. Я создал оба, используя приведенный ниже код, и я хочу сделать контурную диаграмму данных.Но то, что я попробовал, не работает, а просто создает голубую картинкуКак мне создать правильный контурный график таких данных?

N = 1000

mean_a = [0, 0]
cov_a = [[1, 0], [0, 100]]  # diagonal covariance

mean_b = [5, 0]
cov_b = [[5, 0], [0, 500]]  # diagonal covariance

Xa = np.random.multivariate_normal(mean_a, cov_a, N)
Xb = np.random.multivariate_normal(mean_b, cov_b, N)
fig, ax3 = plt.subplots(nrows=1,ncols=1,figsize=(15,8))
ax3.contourf(Xa)

1 Ответ

0 голосов
/ 26 ноября 2018

Ввод: двумерные точки данных - Xa имеет форму [N, 2].Это N точек в 2D-пространстве.

Желаемый результат: контурный график в двух измерениях.countourf - правильный инструмент для этого, но обратите внимание на документацию .Эта функция рисует контур карты высот .

Отсутствует шаг: превращение отдельных точек данных в карту высот.

Вопрос заключается враспределения.Чтобы построить распределение в 1D, мы должны сгенерировать гистограмму.Чтобы сделать это в 2D, давайте создадим 2D гистограмму!numpy.histogram2d сделает именно это для нас.Он создает карту высот, подходящую для contourf, путем деления пространства на обычные ячейки и подсчета количества точек данных, попадающих в каждую ячейку.

Вот так:

N = 1000

mean_a = [0, 0]
cov_a = [[2, 1], [1, 2]]

Xa = np.random.multivariate_normal(mean_a, cov_a, N)
fig, ax3 = plt.subplots(nrows=1,ncols=1,figsize=(15,8))

(counts, x_bins, y_bins) = np.histogram2d(Xa[:, 0], Xa[:, 1])
ax3.contourf(counts, extent=[x_bins[0], x_bins[-1], y_bins[0], y_bins[-1]])

enter image description here

...