程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

matplotlib plot_surface具有非线性颜色图的3D图

发布于2019-10-31 08:49     阅读(1729)     评论(0)     点赞(28)     收藏(4)


我有以下python代码,其中显示了以下3D图。 剧情显示地板上有凹凸

我的代码是:

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()

在此处输入图片说明

现在,您可以扩展绘图的彩色部分,例如使用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))

在此处输入图片说明



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/147950/1b36bf79c551d8d3346c/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

28 0
收藏该文
已收藏

评论内容:(最多支持255个字符)