[解決済み] matplotlib (等しい単位長): 縦横比が「等しい」場合、z軸はx軸とy軸に等しくありません。
2022-11-07 16:10:38
質問
3Dグラフのアスペクト比を等しく設定すると
z-axis
は「等しい」に変更されません。そこで、この
fig = pylab.figure()
mesFig = fig.gca(projection='3d', adjustable='box')
mesFig.axis('equal')
mesFig.plot(xC, yC, zC, 'r.')
mesFig.plot(xO, yO, zO, 'b.')
pyplot.show()
以下を与える。
ここで、明らかにz軸の単位長さはx軸とy軸の単位と等しくありません。
どうしたら3つの軸の単位長さを等しくすることができるでしょうか。私が見つけたすべての解決策はうまくいきませんでした。
どのように解決するのですか?
matplotlibはまだ3Dで正しく等軸を設定しないと思います...。しかし、私は何回か前に(どこか忘れましたが)トリックを見つけ、それを使って適応させました。コンセプトは、データの周りに偽の立方体のバウンディングボックスを作成することです。 以下のコードでテストできます。
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.set_aspect('equal')
X = np.random.rand(100)*10+5
Y = np.random.rand(100)*5+2.5
Z = np.random.rand(100)*50+25
scat = ax.scatter(X, Y, Z)
# Create cubic bounding box to simulate equal aspect ratio
max_range = np.array([X.max()-X.min(), Y.max()-Y.min(), Z.max()-Z.min()]).max()
Xb = 0.5*max_range*np.mgrid[-1:2:2,-1:2:2,-1:2:2][0].flatten() + 0.5*(X.max()+X.min())
Yb = 0.5*max_range*np.mgrid[-1:2:2,-1:2:2,-1:2:2][1].flatten() + 0.5*(Y.max()+Y.min())
Zb = 0.5*max_range*np.mgrid[-1:2:2,-1:2:2,-1:2:2][2].flatten() + 0.5*(Z.max()+Z.min())
# Comment or uncomment following both lines to test the fake bounding box:
for xb, yb, zb in zip(Xb, Yb, Zb):
ax.plot([xb], [yb], [zb], 'w')
plt.grid()
plt.show()
zデータはx,yに比べて一桁ほど大きいのですが、equal axisオプションを付けてもz軸はオートスケールされます。
しかし、バウンディングボックスを追加すると、正しいスケーリングが得られます。
関連
-
[解決済み] Matplotlib のプロット: 軸、凡例、空白を削除する
-
[解決済み] CSSでdivのアスペクト比を維持する
-
[解決済み] CSSによる画像の強制リサイズとアスペクト比の保持
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
-
[解決済み] if 節の終了方法
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] matplotlib で x 軸と y 軸のスケールを等しくする方法
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複