[解決済み] matplotlibでアスペクト比を設定するには?
質問
正方形のプロット(imshowを使用)、つまりアスペクト比1:1のプロットを作ろうとしているのですが、うまくいきません。どれもうまくいきません。
import matplotlib.pyplot as plt
ax = fig.add_subplot(111,aspect='equal')
ax = fig.add_subplot(111,aspect=1.0)
ax.set_aspect('equal')
plt.axes().set_aspect('equal')
呼び出しが無視されているだけのような気がします(matplotlibでよくある問題のようです)。
どうすればいいですか?
3度目の正直です。私の推測では、これはバグであり ゼンヤの回答 は、最新版で修正されていることを示唆しています。私はバージョン0.99.1.1を持っており、以下の解決策を作成しました。
import matplotlib.pyplot as plt
import numpy as np
def forceAspect(ax,aspect=1):
im = ax.get_images()
extent = im[0].get_extent()
ax.set_aspect(abs((extent[1]-extent[0])/(extent[3]-extent[2]))/aspect)
data = np.random.rand(10,20)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(data)
ax.set_xlabel('xlabel')
ax.set_aspect(2)
fig.savefig('equal.png')
ax.set_aspect('auto')
fig.savefig('auto.png')
forceAspect(ax,aspect=1)
fig.savefig('force.png')
これは『force.png』です。
以下は、私の失敗した、しかしできれば有益な試みである。
2回目の回答
以下の私の「オリジナルの答え」は、次のようなことを行うので、やりすぎです。
axes.set_aspect()
. を使いたいのだと思います。
axes.set_aspect('auto')
. なぜそうなるのか理解できませんが、例えばこのスクリプトのように正方形の画像プロットが生成されます。
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rand(10,20)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(data)
ax.set_aspect('equal')
fig.savefig('equal.png')
ax.set_aspect('auto')
fig.savefig('auto.png')
アスペクト比が「等しい」画像プロットを生成する。 と「自動」アスペクト比のものがあります。
オリジナルの回答」で提供された以下のコードは、明示的に制御されたアスペクト比のための出発点を提供しますが、imshowが呼び出されると無視されるようです。
オリジナルの回答です。
希望するアスペクト比になるようにサブプロットパラメータを調整するルーチンの例です。
import matplotlib.pyplot as plt
def adjustFigAspect(fig,aspect=1):
'''
Adjust the subplot parameters so that the figure has the correct
aspect ratio.
'''
xsize,ysize = fig.get_size_inches()
minsize = min(xsize,ysize)
xlim = .4*minsize/xsize
ylim = .4*minsize/ysize
if aspect < 1:
xlim *= aspect
else:
ylim /= aspect
fig.subplots_adjust(left=.5-xlim,
right=.5+xlim,
bottom=.5-ylim,
top=.5+ylim)
fig = plt.figure()
adjustFigAspect(fig,aspect=.5)
ax = fig.add_subplot(111)
ax.plot(range(10),range(10))
fig.savefig('axAspect.png')
このような図が出来上がります。
図の中に複数のサブプロットがある場合、yとxのサブプロットの数をキーワードパラメータ(デフォルトはそれぞれ1)としてルーチンに含めたいと思うことは想像がつきます。そして、これらの数値と
hspace
と
wspace
キーワードを使用すると、すべてのサブプロットを正しいアスペクト比にすることができます。
関連
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] Windowsにpipをインストールするにはどうしたらいいですか?
-
[解決済み] リスト項目の出現回数を数えるにはどうしたらいいですか?
-
[解決済み] Matplotlib で凡例をプロットの外側に配置する方法
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Matplotlibで図のタイトルと軸ラベルのフォントサイズを設定するには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】Python elifの構文が無効です【終了しました