gpt4 book ai didi

python - matplotlib plot_surface 带有非线性颜色图的 3D 图

转载 作者:太空狗 更新时间:2023-10-30 00:12:54 49 4
gpt4 key购买 nike

我有以下 python 代码,它显示以下 3D 图。 plot showing a bump on the floor

我的代码是:

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np


# Generate data example
X,Y = np.meshgrid(np.arange(-99,-90), np.arange(-200,250,50))
Z = np.zeros_like(X)
Z[:,0] = 100.
Z[4][7] = 10

# Normalize to [0,1]
Z = (Z-Z.min())/(Z.max()-Z.min())
colors = cm.viridis(Z)
rcount, ccount, _ = colors.shape

fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, rcount=rcount, ccount=ccount,
facecolors=colors, shade=False)

surf.set_facecolor((0,0,0,0))
plt.show()

我想用不同的颜色为 XY 平面上的不规则着色。我希望能够突出显示 XY 平面上的颠簸。我该怎么做?

最佳答案

问题是网格不是很密集。凸点由单个像素组成。所以网格中有 4 个单元格,其中 3 个的左下角为 0,因此不会根据它们的值接收不同的颜色。只有真正 凸起的一个像素被着色。

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np

X,Y = np.meshgrid(np.arange(-99,-90), np.arange(-200,250,50))
Z = np.zeros_like(X)
Z[:,0] = 100.
Z[4][7] = 10

norm = plt.Normalize(Z.min(),Z.min()+10 )
colors = cm.viridis(norm(Z))

fig = plt.figure()
ax = fig.gca(projection='3d')

surf = ax.plot_surface(X, Y, Z, facecolors=colors, shade=False)
surf.set_facecolor((0,0,0,0))

plt.show()

enter image description here

现在您可以展开绘图的彩色部分,例如使用 scipy.ndimage.grey_dilation,这样所有相邻的像素也变成黄色。

from scipy import ndimage
C = ndimage.grey_dilation(Z, size=(2,2), structure=np.ones((2, 2)))
norm = plt.Normalize(Z.min(),Z.min()+10 )
colors = cm.viridis(norm(C))

enter image description here

关于python - matplotlib plot_surface 带有非线性颜色图的 3D 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48235880/

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