У меня есть два массива numpy, первый (30, 365) и содержит значения для 30 глубин в течение года, второй массив (30, 1) и содержит фактическую глубину (в метрах), соответствующую глубинам в первый массив. Я хочу построить первый массив, чтобы глубины масштабировались в соответствии со вторым массивом, но я также хочу, чтобы данные были интерполированы (первые несколько глубин относительно близки друг к другу, а более низкие глубины расположены далеко друг от друга, что придает изображению pcolor блочный вид). .)
Вот что я делаю:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 365, 1)
X, Y = np.meshgrid(x, depth) #depth is the (30, 1) array
plt.pcolor(X, -Y, data) #data is the (30, 365) array
что приводит к блочному виду, есть идеи о том, как я могу получить более плавный график?
Ответ 1 · рейтинг 4 · tiago
Находятся ли ваши глубины на регулярной сетке (т. е. с постоянным интервалом)? Если это так, вы можете использовать imshow и установить диапазон с помощью ключевого слова extent и aspect='auto'. В противном случае у вас есть два варианта.
Вместо этого вы можете использовать pcolormesh и использовать shading='gouraud'. Это поможет с четким квантованием цвета, но не так хорошо, как интерполяция.
Второй вариант - интерполировать данные в новую обычную сетку глубины, поэтому вы можете использовать imshow и другие параметры интерполяции. Например, для интерполяции только по направлению глубины вы можете использовать interpolate.interp1d scipy:
from scipy.interpolate import interp1d
fint = interp1d(depth, data.T, kind='cubic')
newdata = fint(newdepth).T
.T были добавлены, потому что интерполяция должна быть по последнему индексу, а глубина - это первый индекс ваших данных. Вы можете заменить kind на 'linear', если хотите.