Как сгладить контур контура matplotlib?
У меня есть массив numpy с этой формой: (33,10). Когда я рисую контур, я получаю уродливое изображение следующим образом:
![enter image description here]()
в то время как contour()
, похоже, не имеет аргументов о сглаживании или какой-либо функции интерполяции.
Я как-то ожидал, что инструмент, который предлагает контурный график, должен также предлагать сглаживание.
Есть ли прямой способ сделать это в MPL?
Ответы
Ответ 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. Подробнее см. пример.