Python3:在某些点上绘制不带颜色的曲面

2024-05-20 13:17:19 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个2D数组,例如:

Z = np.array([[    0,     0,     0,     0,     0,     0,     0,     0,     0,            0,     0,     0,     0,     0,     0,     0,     0,     0],
   [    0, 26067, 26067, 26750, 26750,     0,     0, 26673, 26673,            0,     0, 24411, 24411,     0,     0, 45494, 45494,     0],
   [    0, 26067, 26067, 26750, 26750,     0,     0, 26673, 26673,            0,     0, 24411, 24411,     0,     0, 45494, 45494,     0],
   [    0, 26750, 26750,     0,     0, 21237, 21237, 25516, 25516,        25839, 25839,     0,     0,     0,     0, 41704, 41704,     0],
   [    0, 26750, 26750,     0,     0, 21237, 21237, 25516, 25516,        25839, 25839,     0,     0,     0,     0, 41704, 41704,     0],
   [    0,     0,     0, 21236, 21236, 26414, 26414,     0,     0,        22847, 22847,     0,     0, 27051, 27051,     0,     0,     0],
   [    0,     0,     0, 21236, 21236, 26414, 26414,     0,     0,        22847, 22847,     0,     0, 27051, 27051,     0,     0,     0],
   [    0, 26673, 26673, 25516, 25516,     0,     0, 26414, 26414,            0,     0,     0,     0, 45013, 45013,     0,     0,     0],
   [    0, 26673, 26673, 25516, 25516,     0,     0, 26414, 26414,            0,     0,     0,     0, 45013, 45013,     0,     0,     0],
   [    0,     0,     0, 25839, 25839, 22860, 22860,     0,     0,        26213, 26213, 39181, 39181,     0,     0,     0,     0,     0],
   [    0,     0,     0, 25839, 25839, 22860, 22860,     0,     0,        26213, 26213, 39181, 39181,     0,     0,     0,     0,     0],
   [    0, 24411, 24411,     0,     0,     0,     0,     0,     0,        39183, 39183,     0,     0,     0,     0,     0,     0,     0],
   [    0, 24411, 24411,     0,     0,     0,     0,     0,     0,        39183, 39183,     0,     0,     0,     0,     0,     0,     0],
   [    0,     0,     0,     0,     0, 27052, 27052, 45015, 45015,            0,     0,     0,     0,     0,     0,     0,     0,     0],
   [    0,     0,     0,     0,     0, 27052, 27052, 45015, 45015,            0,     0,     0,     0,     0,     0,     0,     0,     0],
   [    0, 45494, 45494, 41434, 41434,     0,     0,     0,     0,            0,     0,     0,     0,     0,     0,     0,     0,     0],
   [    0, 45494, 45494, 41434, 41434,     0,     0,     0,     0,            0,     0,     0,     0,     0,     0,     0,     0,     0],
   [    0,     0,     0,     0,     0,     0,     0,     0,     0,            0,     0,     0,     0,     0,     0,     0,     0,     0]])

X = np.array([[ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5],
   [ 0.5,  0.5,  1.5,  1.5,  2.5,  2.5,  3.5,  3.5,  4.5,  4.5,  5.5,         5.5,  6.5,  6.5,  7.5,  7.5,  8.5,  8.5]])

Y = np.array([[ 0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5,         0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5],
   [ 0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5,         0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5],
   [ 1.5,  1.5,  1.5,  1.5,  1.5,  1.5,  1.5,  1.5,  1.5,  1.5,  1.5,         1.5,  1.5,  1.5,  1.5,  1.5,  1.5,  1.5],
   [ 1.5,  1.5,  1.5,  1.5,  1.5,  1.5,  1.5,  1.5,  1.5,  1.5,  1.5,         1.5,  1.5,  1.5,  1.5,  1.5,  1.5,  1.5],
   [ 2.5,  2.5,  2.5,  2.5,  2.5,  2.5,  2.5,  2.5,  2.5,  2.5,  2.5,         2.5,  2.5,  2.5,  2.5,  2.5,  2.5,  2.5],
   [ 2.5,  2.5,  2.5,  2.5,  2.5,  2.5,  2.5,  2.5,  2.5,  2.5,  2.5,         2.5,  2.5,  2.5,  2.5,  2.5,  2.5,  2.5],
   [ 3.5,  3.5,  3.5,  3.5,  3.5,  3.5,  3.5,  3.5,  3.5,  3.5,  3.5,         3.5,  3.5,  3.5,  3.5,  3.5,  3.5,  3.5],
   [ 3.5,  3.5,  3.5,  3.5,  3.5,  3.5,  3.5,  3.5,  3.5,  3.5,  3.5,         3.5,  3.5,  3.5,  3.5,  3.5,  3.5,  3.5],
   [ 4.5,  4.5,  4.5,  4.5,  4.5,  4.5,  4.5,  4.5,  4.5,  4.5,  4.5,         4.5,  4.5,  4.5,  4.5,  4.5,  4.5,  4.5],
   [ 4.5,  4.5,  4.5,  4.5,  4.5,  4.5,  4.5,  4.5,  4.5,  4.5,  4.5,         4.5,  4.5,  4.5,  4.5,  4.5,  4.5,  4.5],
   [ 5.5,  5.5,  5.5,  5.5,  5.5,  5.5,  5.5,  5.5,  5.5,  5.5,  5.5,         5.5,  5.5,  5.5,  5.5,  5.5,  5.5,  5.5],
   [ 5.5,  5.5,  5.5,  5.5,  5.5,  5.5,  5.5,  5.5,  5.5,  5.5,  5.5,         5.5,  5.5,  5.5,  5.5,  5.5,  5.5,  5.5],
   [ 6.5,  6.5,  6.5,  6.5,  6.5,  6.5,  6.5,  6.5,  6.5,  6.5,  6.5,         6.5,  6.5,  6.5,  6.5,  6.5,  6.5,  6.5],
   [ 6.5,  6.5,  6.5,  6.5,  6.5,  6.5,  6.5,  6.5,  6.5,  6.5,  6.5,         6.5,  6.5,  6.5,  6.5,  6.5,  6.5,  6.5],
   [ 7.5,  7.5,  7.5,  7.5,  7.5,  7.5,  7.5,  7.5,  7.5,  7.5,  7.5,         7.5,  7.5,  7.5,  7.5,  7.5,  7.5,  7.5],
   [ 7.5,  7.5,  7.5,  7.5,  7.5,  7.5,  7.5,  7.5,  7.5,  7.5,  7.5,         7.5,  7.5,  7.5,  7.5,  7.5,  7.5,  7.5],
   [ 8.5,  8.5,  8.5,  8.5,  8.5,  8.5,  8.5,  8.5,  8.5,  8.5,  8.5,         8.5,  8.5,  8.5,  8.5,  8.5,  8.5,  8.5],
   [ 8.5,  8.5,  8.5,  8.5,  8.5,  8.5,  8.5,  8.5,  8.5,  8.5,  8.5,         8.5,  8.5,  8.5,  8.5,  8.5,  8.5,  8.5]])       

我用这个来绘制曲面:

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt  

fig, ax = plt.subplots()
p = ax.pcolor(X, Y, Z, cmap=cm.plasma) #inferno, plasma, jet, sismic...
fig.colorbar(p)
plt.show()

我不希望matplotlib以0绘制(或绘制)大的下东区,因此我希望看到的不是与0值相关的颜色,而是背景色(或透明色)

在MATLAB中,我可以将NaN分配给您不想看到的值。我试过使用math.nan,但它不起作用。在Python 3.6中如何实现这一点

谢谢


Tags: fromimportmatplotlibnpfig绘制cmplt
1条回答
网友
1楼 · 发布于 2024-05-20 13:17:19

与使用NAN相比,您可以通过屏蔽希望忽略的单元来实现这一点。Matplotlib将看到屏蔽的值,而不会打印它们

numpy.ma

https://docs.scipy.org/doc/numpy-1.15.1/reference/maskedarray.html

您可以通过将布尔数组作为索引或单独屏蔽每个单元格来屏蔽数组;这是一个非常灵活的模块

X = np.ma.masked_where(X>0.5, X)

比如说

编辑:我知道这是2D中的行为,尽管我不确定3D。我不清楚OP的问题是什么

相关问题 更多 >