Matplotlib 3d 绘图:在 2 个表面上获取单个颜色图

laolux

我正在使用带有 2 个表面的 matplotlib 制作 3d 图(请参见下面的示例)。到目前为止,两个表面都有自己的颜色图,底部为蓝色,顶部为黄色。

但是,我想要两个表面的单一颜色图,即最底部是蓝色,最顶部是黄色,两个表面的接触点是绿色。

我怎样才能做到这一点?我是否需要在绘图之前以某种方式组合两个表面,或者我是否需要限制两个表面的颜色图(从蓝色到绿色,从绿色到黄色)?

谢谢你的帮助。

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

ky = np.linspace(-np.pi*2/3,np.pi*2/3,100)
kz = np.linspace(-np.pi*2/3,np.pi*2/3,100)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

KY, KZ = np.meshgrid(ky, kz)
E = np.cos(KY)*np.cos(KZ)
ax.plot_surface(KY, KZ, E-1, rstride=1, cstride=1, cmap=cm.viridis)   #surface 1
ax.plot_surface(KY, KZ, -E+1, rstride=1, cstride=1, cmap=cm.viridis)  #surface 2
ax.view_init(elev=7, azim=-69)
plt.show()

2 个具有独立颜色图的表面

阴暗的天空

您可以显式设置vminvmax颜色图以强制颜色范围。

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

ky = np.linspace(-np.pi*2/3,np.pi*2/3,100)
kz = np.linspace(-np.pi*2/3,np.pi*2/3,100)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

KY, KZ = np.meshgrid(ky, kz)
E = np.cos(KY)*np.cos(KZ)
ax.plot_surface(KY, KZ, E-1, rstride=1, cstride=1, cmap=cm.viridis, vmin=-2, vmax=2)   #surface 1
ax.plot_surface(KY, KZ, -E+1, rstride=1, cstride=1, cmap=cm.viridis, vmin=-2, vmax=2)  #surface 2
ax.view_init(elev=7, azim=-69)
plt.show()

在此处输入图片说明

要使范围与两个曲面中的实际 Z 值紧密相关,您可以使用

vmin=np.amin(E-1), vmax=np.amax(-E+1)

您还可以通过定义自己的颜色映射来创建这种效果,这些颜色映射在顶部从黄色变为绿色,在底部从绿色变为蓝色。

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

ky = np.linspace(-np.pi*2/3,np.pi*2/3,100)
kz = np.linspace(-np.pi*2/3,np.pi*2/3,100)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

KY, KZ = np.meshgrid(ky, kz)
E = np.cos(KY)*np.cos(KZ)

viridis = cm.get_cmap('viridis', 512)
topcolors = viridis(np.linspace(0.5, 1, 256))
topcm = ListedColormap(topcolors)
bottomcolors = viridis(np.linspace(0, 0.5, 256))
bottomcm = ListedColormap(bottomcolors)

ax.plot_surface(KY, KZ, E-1, rstride=1, cstride=1, cmap=bottomcm)   #surface 1
ax.plot_surface(KY, KZ, -E+1, rstride=1, cstride=1, cmap=topcm)  #surface 2
ax.view_init(elev=7, azim=-69)
plt.show()

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python 2D绘图为3D(Matplotlib)

来自分类Dev

来自 Dataframe 的不同类的 Matplotlib 3D 绘图颜色

来自分类Dev

3D绘图长宽比[matplotlib]

来自分类Dev

在 matplotlib 2.x 中设置 3d 绘图线宽

来自分类Dev

使用matplotlib进行连续3d绘图

来自分类Dev

使用matplotlib从导入的数据进行3D绘图

来自分类Dev

Matplotlib 3D 绘图无法按预期工作

来自分类Dev

如何获得所需的 matplotlib 3d 绘图样式?

来自分类Dev

matplotlib:获取绘图的轴比

来自分类Dev

Matplotlib的3D图

来自分类Dev

Pandas或Matplotlib中的绘图图

来自分类Dev

R中带有plot3D或绘图的3D表面图

来自分类Dev

matplotlib中的自定义颜色图用于3D表面图

来自分类Dev

Matplotlib分离3D数据的2D等高线投影图

来自分类Dev

matplotlib中的3d表面

来自分类Dev

使用 python 绘制 3D 表面: raise ValueError("Argument Z must be 2-dimensional.") matplotlib

来自分类Dev

matplotlib 3d表面图未显示

来自分类Dev

使用python中的matplotlib创建3D表面图

来自分类Dev

在3D中插值,使用matplotlib进行绘图-出了点问题

来自分类Dev

Matplotlib 3D 绘图,如何正确使用 set_zlim()

来自分类Dev

垂直填充3D Matplotlib图

来自分类Dev

定义Matplotlib 3D条形图的颜色

来自分类Dev

Python-Matplotlib中的3D线图颜色图

来自分类Dev

Python-Matplotlib中的3D线图颜色图

来自分类Dev

matplotlib:在2d图上投影3d曲面

来自分类Dev

Matplotlib绘图条形图在数据框中具有2列的关系

来自分类Dev

Matplotlib和PyQt5绘图图

来自分类Dev

用matplotlib谱图进行绘图?

来自分类Dev

无法为绘图颜色配置matplotlib rcparams