Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Интерполяция с помощью matplotlib pcolor

Автор вопроса: pterОтветов: 2

У меня есть два массива 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

что приводит к блочному виду, есть идеи о том, как я могу получить более плавный график?

pythonnumpyscipymatplotlib

Ответы

Ответ 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', если хотите.

Ответ 2 · рейтинг 3 · nye17

нет, pcolor не выполняет интерполяцию. Вместо этого вы можете попробовать NonUniformImageили даже imshow. Ознакомьтесь с примерами здесь

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы