Python 如何平滑matplotlib等高线图?
我有这个形状的numpy数组:(33,10)。当我绘制等高线时,会得到如下丑陋的图像: 而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.
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
,了解一点。