Python 如何平滑matplotlib等高线图?

Python 如何平滑matplotlib等高线图?,python,matplotlib,Python,Matplotlib,我有这个形状的numpy数组:(33,10)。当我绘制等高线时,会得到如下丑陋的图像: 而contour() 不知何故,我希望提供等高线图的工具也能提供平滑效果。 在MPL中有直接的方法吗?试着用一种简单的方法平滑数据集。有关更多信息,请参阅。获得平滑轮廓的方法并不简单。另一种方法是尝试imshow。你可以寻找其他的可能性 import pylab as plt import numpy as np Z=np.loadtxt('data.txt') plt.subplot(131) plt.

我有这个形状的numpy数组:(33,10)。当我绘制等高线时,会得到如下丑陋的图像:

contour()

不知何故,我希望提供等高线图的工具也能提供平滑效果。

在MPL中有直接的方法吗?

试着用一种简单的方法平滑数据集。有关更多信息,请参阅。

获得平滑轮廓的方法并不简单。另一种方法是尝试
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()

正如其他人已经指出的,您需要插入数据

有很多不同的方法可以做到这一点,但是对于初学者来说,请考虑<代码> SCIPY .nimia.ZooM < /P> 作为一个快速的例子:

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()

如果您的数据很稀少,Joe Kingtons的答案很好

如果你的数据是有噪声的,你应该考虑过滤它:
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()

第一个示例是直线图,第二个示例是图像,因此没有一个适用于等高线图。或者也许我错了,被这变得多么复杂弄得不知所措?你能在公共主机上上传原始数据集和你的脚本吗?当然,在这里。以防万一,用
plt.contour(numpy.loadtxt('data.txt'))绘制它。
尝试使用
contourf()
而不是
contour()
我认为ymn是正确的,但您可能还需要重新采样数据以获得数据点之间的一些插值点。如果你的采样太粗糙,绘图工具可以做很多事情。哇!你总是想出一些我以前没听说过的东西。我只是花了太多的时间试图使我的数字尽可能漂亮。。。这也许可以解释为什么我总是不能按时完成任务!:)我会使用[griddata]()。@nicogaro-使用
griddata
的问题是,它用于不规则采样的输入(即分散的数据)。对于规则网格数据的重新插值,有不同的、更有效的算法
scipy.ndimage.zoom
利用了输入的规则网格特性。对于较小的输入网格,这可能并不明显,但对于较大的网格,
zoom
可以快几个数量级。但是,如果您没有一个常规的网格开始,那么是的,
griddata
或类似的东西(例如
scipy.interpolate.Rbf
)就是您想要的。感谢@Joe Kington的解释,我将检查
scipy.ndimage.zoom
,了解一点。