关于python:如何平滑matplotlib等高线图? 您所在的位置:网站首页 等值线疏密程度 关于python:如何平滑matplotlib等高线图?

关于python:如何平滑matplotlib等高线图?

2023-03-09 04:50| 来源: 网络整理| 查看: 265

我有以下形状的numpy数组:(33,10)。当我绘制轮廓时,会得到如下丑陋的图像:

而contour()似乎没有关于平滑或某种插值功能的任何论据。

我以某种方式期望提供轮廓图的工具也应该提供平滑处理。 在MPL中有直接的方法吗?

正如其他人已经指出的那样,您需要对数据进行插值。

有许多不同的方法可以执行此操作,但是对于初学者来说,请考虑scipy.ndimage.zoom。

例如:

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

相关讨论 哇!您总是想出一些我以前从未听说过的东西。 我花了太多时间试图使自己的形象变得尽可能漂亮……这可能解释了为什么我从来没有按时完成事情! :) 我会使用[griddata](docs.scipy.org/doc/scipy-0.14.0/reference/Generated/…)。 @nicoguaro-使用griddata的问题在于它打算用于不规则采样的输入(即分散的数据)。为了重新插值规则网格数据,有不同的,效率更高的算法。 scipy.ndimage.zoom利用输入的规则网格性质。对于较小的输入网格,这可能并不明显,但是对于较大的网格,zoom可以快几个数量级。但是,如果您没有常规的网格开始,那么可以使用griddata或类似的东西(例如scipy.interpolate.Rbf)。 感谢@Joe Kington的解释,我将检查scipy.ndimage.zoom来学习一点。

如果您的数据稀疏,Joe Kingtons的回答很好。

如果您的数据比较嘈杂,则应考虑对其进行过滤:

123456789from 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。您可以在这里寻找其他可能性。

1234567891011121314import 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平滑数据集。有关更多信息,请参见示例。

相关讨论 第一个示例用于线图,第二个示例用于图像,因此没有一个适用于等高线图。还是我错了,变得如此复杂而感到不知所措? 您可以在公共托管上载原始数据集和脚本吗? 当然,这里是data.txt。以防万一,用plt.contour(numpy.loadtxt('data.txt'))绘制 尝试使用contourf()而不是contour() 你试过了吗?填充表面相同。仅供参考,以下是平滑相同数据的外观:i.imgur.com/AZR1l.png 我认为ymn是正确的,但您可能还需要重新采样数据以获取数据点之间的一些插值点。如果您的采样过于粗糙,则绘图实用程序可以做很多事情。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有