假设我有一些matplotlib代码如下所示:
### import statements, etc. ###
ax1 = fig.add_subplot(221)
### plot some 2D data to ax1 ###
ax2 = fig.add_subplot(221, projection='3d')
### plot some 3D data to ax2 ###
ax2 = ...
行的效果是删除绘制到ax1
的任何内容,并创建一个新的Axes3DSubplot对象。
我的问题是:如何获得一个ax2
对象(具有与ax1
相同的子图位置),该对象具有3D投影并“导入”之前的所有2D数据绘制为ax1
?
答案 0 :(得分:0)
您可以在相应的2D-Axes
中绘制3D-Axes
中的数据。例如:
从中得到:
在这里绘图:
这是用于上述示例的代码:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
plt.ion()
ax1 = plt.subplot(221)
ax1.plot([1,2,3,4])
ax2 = plt.subplot(222)
ax2.plot([4,3,2,1])
ax3 = plt.subplot(223)
ax3.plot([4,3,2,1])
ax4 = plt.subplot(224)
ax4.plot([1,2,3,4])
plt.gcf().tight_layout()
plt.show()
plt.figure()
ax1_3d = plt.subplot(221, projection='3d')
ax2_3d = plt.subplot(222, projection='3d')
ax3_3d = plt.subplot(223, projection='3d')
ax4_3d = plt.subplot(224, projection='3d')
[ax1_3d.plot(*ax1.lines[i].get_data()) for i,v in enumerate(ax1.lines)]
[ax2_3d.plot(*ax2.lines[i].get_data()) for i,v in enumerate(ax2.lines)]
[ax3_3d.plot(*ax3.lines[i].get_data()) for i,v in enumerate(ax3.lines)]
[ax4_3d.plot(*ax4.lines[i].get_data()) for i,v in enumerate(ax4.lines)]
plt.gcf().tight_layout()
plt.show()
答案 1 :(得分:0)
这有点像复活,但今天我遇到了同样的问题并找到了一个解决方案,主要基于@Saullo Castro的回答。这个例子使用了一个子图,但无论你有多少,这个想法都是一样的:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# Initial 2d axes
ax1 = plt.subplot(111)
ax1.plot([1,2,3,4])
# Create Axes3D and plot the 2d data on it
ax1_3d = plt.subplot(111, projection='3d')
[ax1_3d.plot(*ax1.lines[i].get_data()) for i,v in enumerate(ax1.lines)]
# Important step: turn off the old 2d axes!
ax1.set_axis_off()
plt.show()