Python 如何解决Matplotlib中的锯齿网格?

Python 如何解决Matplotlib中的锯齿网格?,python,matplotlib,Python,Matplotlib,我有个问题需要你的帮助。现在我有了一个网格数据。它由多个不同的值组成。结构如下所示。 事实上,我想要得到的图形应该是由光滑的填充曲面组成的。如下图所示。 我提供了一个特定的数据集。请参阅。 。 此数据集采用“surfer”软件定义的asc格式。你可以用“pykrige”来阅读。使用以下代码渲染 import sys import matplotlib.pyplot as plt import pykrige.kriging_tools as kt def func(cmd):

我有个问题需要你的帮助。现在我有了一个网格数据。它由多个不同的值组成。结构如下所示。

事实上,我想要得到的图形应该是由光滑的填充曲面组成的。如下图所示。

我提供了一个特定的数据集。请参阅。 。 此数据集采用“surfer”软件定义的asc格式。你可以用“pykrige”来阅读。使用以下代码渲染

import sys
import matplotlib.pyplot as plt
import pykrige.kriging_tools as kt

def func(cmd):    
   ascFile = cmd[1]

   ascFileContent = kt.read_asc_grid(ascFile)
   Z = ascFileContent[0]
   X = ascFileContent[1]
   Y = ascFileContent[2]
   print(Z)

   fig = plt.figure()    
   ax = fig.add_subplot()

   contour = plt.contourf(X,Y,Z)
   #contour = plt.pcolormesh(X,Y,Z)
   plt.show()


if __name__ == "__main__":

   cmd=["CONTOUR_KYZQ"]
   #gridFile
   cmd.append(r"D:\out.grd")
   func(cmd)

我使用了各种方法,如pcolormesh、contourf。生成的图形是参差不齐的。我怎样才能解决这个问题。请帮帮我。非常感谢。

使用
scipy.ndimage.zoom
平滑图像。这是我对数字5使用的平滑,但是你可以尝试其他数字

import matplotlib.pyplot as plt
import pykrige.kriging_tools as kt
import scipy.ndimage

ascFileContent = kt.read_asc_grid("out.grd")
Z = ascFileContent[0]
X = ascFileContent[1]
Y = ascFileContent[2]

fig = plt.figure()    
plt.rcParams['figure.figsize'] = [20, 14]


new_z = scipy.ndimage.zoom(Z, 5)

contour = plt.contourf(np.linspace(X[0], X[-1], len(X) * 5), 
                       np.linspace(Y[0], Y[-1], len(Y) * 5), 
                       new_z)


plt.show()
如果您放大到一个特定的区域,如在这个代码片段中,您会注意到您的数据本质上是“棋盘格”的。因此,即使在平滑后,仍有一些区域看起来非常像网格(见下文)


欢迎使用堆栈溢出!请花点时间阅读。您需要提供一个包含玩具数据集(请参阅)感谢您关注我的问题感谢您添加数据。你能解释一下它是什么格式的吗?另外,一个小样本,可以作为问题本身的一部分,将是伟大的。谢谢关注。现在,我添加了一段代码来呈现数据集。你可以找到锯齿。我尝试使用插值算法来解决混叠问题。但是没有成功,我无法读取文件。获取错误:ValueError:没有足够的值来解包(预期为2,得到1)非常酷,感谢您的帮助。这个图形看起来好多了。如果图形能达到这个例子的效果,它将是完美的。也就是说,栅格覆盖的区域将变成平滑曲线。我相信这基本上就是你得到的,但是根据你的具体数据。查看我的上一次编辑-由于您数据的特点,它看起来仍然有点像网格。(顺便说一句,如果它回答了您的问题,如果您能为后代接受我的答案,那就太好了)。是的,您找到了问题的关键。此数据集已手动修订。事实上,人们使用贝塞尔曲线来选择一个区域来校正网格值。所以现在我的问题是恢复​​这些曲线由网格点值决定。很高兴我能提供帮助。如果你认为我的回答有帮助,请随时接受。
ascFileContent = kt.read_asc_grid("out.grd")
Z = ascFileContent[0]
X = ascFileContent[1]
Y = ascFileContent[2]

fig = plt.figure()    
plt.rcParams['figure.figsize'] = [20, 14]
ZOOM_FACTOR = 5

new_z = scipy.ndimage.zoom(Z, ZOOM_FACTOR)

contour = plt.contourf(np.linspace(X[0], X[-1], len(X) * ZOOM_FACTOR), 
                       np.linspace(Y[0], Y[-1], len(Y) * ZOOM_FACTOR), 
                       new_z)

plt.xlim((106, 107))
plt.ylim((24, 26))

plt.show()