Мне нужно сделать участок интенсивности.Python - Карта интенсивности без интерполяции
У меня есть три списка значений x, y, z, импортированных из реальных данных: x_list, y_list, z_list
. Каждый из этих списков содержит 200 значений. Поэтому для каждой пары x, y имеется соответствующее значение z.
Я попытался следующие, после некоторого поиска в Интернете и еще один вопрос на StackOverflow:
import numpy as np
import pylab as plt
data = np.loadtxt('data.d')
x_list = data[:,0]
y_list = data[:,1]
z_list = data[:,2]
from scipy.interpolate import interp2d
f = interp2d(x_list,y_list,z_list,kind="linear")
x_coords = np.arange(min(x_list),max(x_list)+1)
y_coords = np.arange(min(y_list),max(y_list)+1)
Z = f(x_coords,y_coords)
fig = plt.imshow(Z,
extent=[min(x_list),max(x_list),min(y_list),max(y_list)],
origin="lower")
fig.axes.set_autoscale_on(False)
plt.scatter(x_list,y_list,400,facecolors='none')
plt.show()
При этом используется интерполяция, и я не уверен, что это именно то, что мне нужно. Есть ли способ построить только 200 значений z, соответствующих 200 x, y парам, для которых у меня есть заданное значение, с интерполяцией с помощью? Очевидно, мне все еще нужно какое-то «отношение интенсивности», я не могу просто иметь диаграмму рассеяния без способа интерпретации «интенсивности» значений 200 z.
Это довольно очевидно, почему значения интерполируются, нет? f = interp2d (..., Z = f (..., plt.imshow (Z ... –
@ tommy.carstensen да, но я не хочу интерполяции. Если это означает использование чего-то другого, а не plt.imshow , это нормально, но мне не нужна интерполяция. – johnhenry
Вы можете сделать 'Z = np.reshape (z_list, (max (x_list), max (y_list))). Пожалуйста, дайте мне знать, если это сработает. –