从3D表面图获取2D等高线图

问题描述

我使用matplotlib plot_surface()函数并以3D绘制复杂的函数。这是我的代码

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

point_num = 200
x = np.linspace(-5,3,point_num)
y = np.linspace(-5,5,point_num)

# Real axis and imaginary axis-----------------------------
Re,Im = np.meshgrid(x,y) 
#----------------------------------------------------------

# here is the complex function I need evaluate-------------
z = Re + Im * 1j
R3 = 1 + z + 1/2 * z**2 + 1/6 * pow(z,3)
#----------------------------------------------------------

# my 3d surface plot----------------------------------------
fig = plt.figure()
ax = plt.axes(projection='3d')

ax.plot_surface(Re,Im,np.abs(R1))
ax.set_xlabel("Im(z)")
ax.set_ylabel("Re(z)")
ax.set_zlabel('R(z)')

plt.show()
#----------------------------------------------------------

我可以成功获取曲面图:

3d_surface

表面看起来像圆锥形。现在,我想用平面R(z)=1对切片进行“切片”并获得2D等高线图。我可以像这样在3D表面上获得轮廓:

ax.contour(Re,np.abs(R3),[1],colors='r')

然后我得到:

3d_contour

我想在独立的2D图中绘制红线轮廓。它应该在实轴和虚轴上。此外,能否获得轮廓线与轴的交点的坐标?如下图所示:

Kopriva

非常感谢您!

解决方法

所以这里的问题是plt.Axes()对象不能同时在2D和3D投影中。在我的版本中,我已注释掉您的3D图,以便我们可以专注于独立的2D图。然后只有这个:

fig = plt.figure()
ax = plt.axes()
ax.contour(Re,Im,np.abs(R3),[1],c='r')

完整版本:

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

point_num = 200
x = np.linspace(-5,3,point_num)
y = np.linspace(-5,5,point_num)

# Real axis and imaginary axis-----------------------------
Re,Im = np.meshgrid(x,y)
#----------------------------------------------------------

# here is the complex function I need evaluate-------------
z = Re + Im * 1j
R3 = 1 + z + 1/2 * z**2 + 1/6 * pow(z,3)
#----------------------------------------------------------

# my 3d surface plot----------------------------------------
fig = plt.figure()
# ax = plt.axes(projection='3d')
# ax.plot_surface(Re,np.abs(R3))
# ax.set_xlabel("Im(z)")
# ax.set_ylabel("Re(z)")
# ax.set_zlabel('R(z)')

# ax.contour(Re,colors='r')
ax = plt.axes()
ax.contour(Re,c='r')

plt.show()
#----------------------------------------------------------

Produces this plot: