5

編集:

サブプロット内で画像を整列させる方法を自分で見つけました(以下を参照):

for ax in axes:
    ax.set_anchor('W')

編集終了

imshow でプロットしたデータがあります。x 方向に長いので、データのスライスを垂直に積み上げられたサブプロットにプロットして、複数の行に分割します。私は結果に満足していますが、最後のサブプロット (他のサブプロットほど広くはない) については、他のサブプロットと揃えておきたいと思っています。

以下のコードは、Python 2.7.1 および matplotlib 1.2.x でテストされています。

#! /usr/bin/env python

import matplotlib.pyplot as plt
import numpy as np

x_slice = [0,3]
y_slices = [[0,10],[10,20],[20,30],[30,35]]
d = np.arange(35*3).reshape((35,3)).T
vmin = d.min()
vmax = d.max()
fig, axes = plt.subplots(len(y_slices), 1)


for i, s in enumerate(y_slices):
    axes[i].imshow( 
        d[ x_slice[0]:x_slice[1], s[0]:s[1] ], 
        vmin=vmin, vmax=vmax,
        aspect='equal',
        interpolation='none'
    )

plt.show()

結果は

垂直に積み上げられたサブプロット、最後に中央揃え

Zhenya のヒントを参考に、axis.get/set_position をいじってみました。幅を半分にしてみましたが、その効果がわかりません

for ax in axes:
    print ax.get_position()

p3 = axes[3].get_position().get_points()
x0, y0 = p3[0]
x1, y1 = p3[1]
# [left, bottom, width, height]
axes[3].set_position([x0, y0, (x1-x0)/2, y1-y0])

ここに画像の説明を入力

get_position各サブプロットの bbox が表示されます:

for ax in axes:
    print ax.get_position()

Bbox(array([[ 0.125     ,  0.72608696],
            [ 0.9       ,  0.9       ]]))
Bbox(array([[ 0.125     ,  0.5173913 ],
            [ 0.9       ,  0.69130435]]))
Bbox(array([[ 0.125     ,  0.30869565],
            [ 0.9       ,  0.4826087 ]]))
Bbox(array([[ 0.125     ,  0.1       ],
            [ 0.9       ,  0.27391304]]))

したがって、すべてのサブプロットの水平範囲はまったく同じです (0.125 から 0.9)。狭い 4 番目のサブプロットから判断すると、サブプロット内の画像は何とか中央に配置されています。

AxesImage オブジェクトを見てみましょう。

for ax in axes:
    print ax.images[0]

AxesImage(80,348.522;496x83.4783)
AxesImage(80,248.348;496x83.4783)
AxesImage(80,148.174;496x83.4783)
AxesImage(80,48;496x83.4783)

繰り返しますが、4 番目の画像も同じ水平範囲です。

次に AxesImage.get_extent() を試してください:

for ax in axes:
    print ax.images[0].get_extent()

# [left, right, bottom, top]
(-0.5, 9.5, 2.5, -0.5)
(-0.5, 9.5, 2.5, -0.5)
(-0.5, 9.5, 2.5, -0.5)
(-0.5, 4.5, 2.5, -0.5)

違いがあります(右)が、左の値はすべて同じなので、なぜ4番目の値が中央にあるのですか?

編集:それらはすべて中央に配置されています...

4

3 に答える 3

8

Axis.set_anchor はこれまでのところ機能しています (手動であまり調整する必要がないことを願っています):

for ax in axes:
    ax.set_anchor('W')

ここに画像の説明を入力

于 2012-06-05T08:30:10.213 に答える
3

次のように、サブプロットの位置を手動で制御できます。

for ax in axes:
  print ax.get_position()

ax[3].set_position([0.1,0.2,0.3,0.4])

または、GridSpecを確認することもできます。

于 2012-06-04T13:07:30.897 に答える
-1

ax.set_position多くの場合、正確にするのは非常に難しいことがわかりました。plt.subplots_adjust(wspace=0.005) # adjust the width between the subplots2 つの水平サブプロット間の距離を調整するために使用したいと思います。

垂直距離も調整できます。

于 2019-07-11T13:49:02.617 に答える