1

次のような 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 オブジェクトを作成することです。

私の質問は、3D プロジェクションを持ち、以前にプロットされたすべての 2D データを「インポート」するax2オブジェクト (以前と同じサブプロット位置を持つ) を取得するにはどうすればよいですか?ax1ax1

4

2 に答える 2

0

これは少し復活ですが、今日同じ問題に遭遇し、主に@Saullo Castroの回答に基づいて解決策を見つけました。この例では 1 つのサブプロットを使用していますが、いくつあってもアイデアは同じです。

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()
于 2015-07-17T20:14:38.653 に答える
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()
于 2013-06-30T06:40:48.973 に答える