Код ниже сначала копирует файл .csv
с массивом, а затем извлекает x
, y
и z
. Чтобы знать размеры, нужно учитывать не только максимум, но и разницу между максимумом и минимумом. Массивы x
и y
интересны только для остальной части кода из-за их минимума и максимума.
Чтобы нарисовать карту тепла, требуется только plt_z
, поскольку она уже имеет правильную форму , x
и y
могут использоваться для установки экстентов (то есть значений для осей x и y). plt.imshow()
аналогична plt.pcolor()
, но позволяет устанавливать экстенты в качестве параметра. Требуется origin='lower'
, потому что для многих форматов изображений источник находится сверху.
Чтобы иметь метки в центре ячеек, необходимо добавить дополнительное поле 0.5
. Для отображения тиков в каждой целой позиции можно использовать MultipleLocator()
.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import ticker
def get_xyz_from_csv_file_np():
data = [[-2, -1, 0],
[-2, 0, 10],
[-2, 1, 0],
[-1, -1, 2],
[-1, 0, 5],
[-1, 1, 2],
[0, -1, 0],
[0, 0, 0],
[0, 1, 10],
[1, -1, 10],
[1, 0, 0],
[1, 1, 0],
[2, -1, 10],
[2, 0, 0],
[2, 1, 10]]
data = np.array(data, dtype=np.int)
x = data[:, 0]
y = data[:, 1]
z = data[:, 2]
n = y.max() - y.min() + 1
m = x.max() - x.min() + 1
return x.reshape(n, m), y.reshape(n, m), z.reshape(n, m)
def draw_heatmap(plt_x, plt_y, plt_z):
plot_name = "plot"
z_name = "Signal"
color_map = plt.cm.rainbow
fig, ax = plt.subplots()
cax = ax.imshow(plt_z, cmap=color_map,
extent=[plt_x.min() - 0.5, plt_x.max() + 0.5, plt_y.min() - 0.5, plt_y.max() + 0.5], origin='lower')
fig.colorbar(cax).set_label(z_name, rotation=270)
ax.set_title(plot_name)
ax.set_aspect('auto')
# optionally force to have ticks at every integer position
ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
ax.yaxis.set_major_locator(ticker.MultipleLocator(1))
plt.show()
x, y, z = get_xyz_from_csv_file_np()
draw_heatmap(x, y, z)
PS: В случае, если значения z имеют естественный порядок, было бы лучше не использовать rainbow
colormap , а одну из 'Perceptually Uniform Sequential' colormaps ('viridis' , "плазма", "ад", "магма", "цивидис").