我试图创建一个类似于下面的this paper的图,本质上是一个有两个不同y轴的3d图。根据this blog的指导,我创建了一个最小的例子。
模块
from mpl_toolkits import mplot3d
import numpy as np
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
创建一些数据
def f(x, y):
return np.sin(np.sqrt(x ** 2 + y ** 2))
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
Z2 = Z*100+100
阴谋
这就创建了一个很好的3d图,但显然只有一个y轴。我在网上找不到任何关于如何使用python的建议,尽管有一些是matlab的。
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z2, rstride=1, cstride=1,
cmap='viridis', edgecolor='none')
ax.set_title('surface');
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z');
代码给出:
参考图:
1条答案
按热度按时间iibxawm41#
这并不容易。一种可能的变通方法如下:
axes
对象仍然是单一的和共享的(出于必要性/明显的matplotlib 3d图限制),但是数据被绘制为相同的连续值尺度 *,但是轴刻度和标签被自定义覆盖以反映不同的值尺度 *。例如,在一个示例中,
生产:x1c 0d1x