gpt4 book ai didi

matplotlib - 如何使 3d matlibplot 不显示掩码值

转载 作者:行者123 更新时间:2023-12-04 21:15:29 25 4
gpt4 key购买 nike

该图应仅显示屏蔽值。如右侧的(操纵)图所示。

默认显示所有值。在二维图表中没有问题。

在 3d 图中也可以吗?如果是,怎么办?

enter image description here

import matplotlib.pyplot as plt
import numpy as np

Z = np.array([
[ 1, 1, 1, 1, 1, ],
[ 1, 1, 1, 1, 1, ],
[ 1, 1, 1, 1, 1, ],
[ 1, 1, 1, 1, 1, ],
[ 1, 1, 1, 1, 1, ],
])

x, y = Z.shape

xs = np.arange(x)
ys = np.arange(y)
X, Y = np.meshgrid(xs, ys)

M = np.ma.fromfunction(lambda i, j: i > j, (x, y))
R = np.ma.masked_where(M, Z)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, R)
#ax.plot_wireframe(X, Y, R)
#ax.plot_trisurf(X.flatten(), Y.flatten(), R.flatten())

fig.show()

最佳答案

坏消息是,似乎plot_surface()只是无视面具。其实还有an open issue about it .

然而,here他们指出了一种解决方法,尽管它远非完美,但它可能会让您获得一些可接受的结果。关键问题是NaN不会绘制值,因此您需要将不想绘制的值“屏蔽”为 np.nan .

您的示例代码将变成这样:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np


Z = np.array([
[ 1, 1, 1, 1, 1, ],
[ 1, 1, 1, 1, 1, ],
[ 1, 1, 1, 1, 1, ],
[ 1, 1, 1, 1, 1, ],
[ 1, 1, 1, 1, 1, ],
])

x, y = Z.shape

xs = np.arange(x)
ys = np.arange(y)
X, Y = np.meshgrid(xs, ys)


R = np.where(X>=Y, Z, np.nan)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, R, rstride=1, linewidth=0)

fig.show()

*我必须添加 rstride=1 plot_surface 的论据称呼;否则我会遇到段错误... o_O

结果如下:

3d matplotlib surface with masked values

关于matplotlib - 如何使 3d matlibplot 不显示掩码值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24577248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com