Подтвердить что ты не робот

Как сгладить контур контура matplotlib?

У меня есть массив numpy с этой формой: (33,10). Когда я рисую контур, я получаю уродливое изображение следующим образом: enter image description here

в то время как contour(), похоже, не имеет аргументов о сглаживании или какой-либо функции интерполяции.

Я как-то ожидал, что инструмент, который предлагает контурный график, должен также предлагать сглаживание.
Есть ли прямой способ сделать это в MPL?

4b9b3361

Ответ 1

Как уже указывалось другими, вам необходимо интерполировать данные.

Существует несколько способов сделать это, но для начинающих рассмотрим scipy.ndimage.zoom.

В качестве быстрого примера:

import numpy as np
import scipy.ndimage
import matplotlib.pyplot as plt

data = np.loadtxt('data.txt')

# Resample your data grid by a factor of 3 using cubic spline interpolation.
data = scipy.ndimage.zoom(data, 3)

plt.contour(data)
plt.show()

enter image description here

Ответ 2

В случае, если ваши данные разрежены, ответ Джо Кингтона велик.

В случае, если ваши данные являются шумными, вам следует рассмотреть возможность их фильтрации:

from numpy import loadtxt
from scipy.ndimage.filters import gaussian_filter
from matplotlib.pyplot import contour, show

sigma = 0.7 # this depends on how noisy your data is, play with it!
data = loadtxt('data.txt')
data = gaussian_filter(data, sigma)
contour(data)
show()

введите описание изображения здесь

Ответ 3

Нет простого способа получить гладкий контур. Альтернативой является попытка imshow. Вы можете посмотреть здесь для других возможностей.

import pylab as plt
import numpy as np

Z=np.loadtxt('data.txt')
plt.subplot(131)
plt.imshow(Z,interpolation='nearest')

plt.subplot(132)
plt.imshow(Z)

plt.subplot(133)
plt.imshow(Z,interpolation='gaussian')

plt.show()

enter image description here

Ответ 4

Попробуйте сгладить ваш набор данных с помощью gaussian_filter. Подробнее см. пример.