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