如何平滑matplotlib等高线图?

我有这种形状的numpyarrays:(33,10)。 当我绘制轮廓时,我得到这样丑陋的图像: 在这里输入图像说明

contour()似乎没有任何关于平滑或某种插值特性的争论。

我不知何故预计提供等值线图的工具也应该提供平滑。
在MPL中有直接的方法吗?

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

有很多不同的方法可以做到这一点,但对于初学者,请考虑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() 

在这里输入图像说明

如果您的数据稀less ,乔金顿的答案是伟大的。

如果你的数据是嘈杂的 ,你应该考虑过滤它,而不是:

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

在这里输入图像说明

没有简单的方法来获得光滑的轮廓。 另一种方法是尝试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() 

在这里输入图像说明

尝试使用gaussian_filter来平滑数据集。 查看更多信息的例子 。