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

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

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

我提供了一个特定的数据集。请参考。 样本数据集。这个数据集是“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。生成的图形呈锯齿状。我怎么解决这个问题。请帮我。多谢。


慕标琳琳
浏览 241回答 1
1回答

慕尼黑8549860

用于scipy.ndimage.zoom平滑图像。这是我对数字 5 使用平滑,但您可以尝试其他数字。import matplotlib.pyplot as pltimport pykrige.kriging_tools as ktimport scipy.ndimageascFileContent = 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()如果您放大特定区域(如此代码片段所示),您会注意到您的数据本质上是“方格的”。所以即使平滑了,也有一些区域看起来非常像网格(见下文)。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 = 5new_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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python