Как интерпретировать этот контурный сюжет? - PullRequest
1 голос
/ 02 августа 2020

Я работаю над проектом внутренней локализации с использованием датчиков и подготовил набор данных, который выглядит следующим образом:

1   0   0   30.263302
2   0   1   30.154142
3   0   2   30.159311
4   1   0   29.978758
5   1   1   29.802172
6   1   2   29.716825
7   2   0   29.671733
8   2   1   29.642293
9   2   2   29.573582

Приведенные выше данные являются средними значениями показаний датчиков, которые Я собрал из приложения. Вторые два столбца - это просто координаты (например, 0,0 0,1 0,2 .... 2,2), а последний столбец - это среднее значение данных датчика.

Я создал график но я не могу понять, как это понять. Так может ли кто-нибудь помочь мне понять, что происходит на изображении ниже?

Контурное изображение

1 Ответ

0 голосов
/ 02 августа 2020

Вот способ создать похожий график из данных, подобных вашим. Обратите внимание, что у вас есть значения около 30, в то время как ваш примерный график имеет значения в диапазоне 0,1 - 2,1.

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

M, N = 24, 15
df = pd.DataFrame({'X': np.repeat(np.arange(M), N),
                   'Y': np.tile(np.arange(N), M),
                   'Val': 30 + np.random.normal(size=(M, N)).cumsum(axis=0).cumsum(axis=1).ravel() / 2})
fig, (ax1, ax2) = plt.subplots(ncols=2)
scat = ax1.scatter(df['X'], df['Y'], c=df['Val'], cmap='Spectral')
plt.colorbar(scat, ax=ax1)
ax1.set_title('just the values')

xs = df['X'].to_numpy().reshape(M, N)
ys = df['Y'].to_numpy().reshape(M, N)
vals = df['Val'].to_numpy().reshape(M, N)

contours = ax2.contour(xs, ys, vals, cmap='Spectral')
ax2.clabel(contours, inline=1, fmt='%.1f', fontsize=10)
plt.colorbar(contours, ax=ax2)
ax2.set_title('isolines')

plt.show()

example plot

The demo data are like:

   X  Y        Val
0  0  0  30.505696
1  0  1  30.617889
2  0  2  30.585834
3  0  3  31.455314
4  0  4  30.897253

Итак, для каждого xy точка сетки есть измерение. На диаграмме рассеяния для каждого измерения отображается точка, цвет которой указывает его значение.

ax.contour() создает контурные линии (или изолинии), соединяющие все точки, в которых, по оценкам, измерения имеют одинаковые стоимость. ax.clabel() добавляет текстовые метки для отображения значения. В этом случае изолинии и текст имеют тот же цвет, что и диаграмма рассеяния, чтобы лучше видеть соответствие. Если вместо этого выбрать фиксированные цвета, будет получен график, аналогичный приведенному в примере.

Помимо ax.contour(), которому требуется x и y на l ie на сетке, есть также ax.tricontour(), где x и y могут быть расположены более свободно.

...