2013-10-10 26 views
17

matplotlibにaxesのセットがあると、そのサイズをピクセル単位で調べる方法はありますか?私は大小の数字に合わせて調整する必要があります。matplotlibの軸サイズをピクセル単位で決定する

(特に私はそれが軸のサイズに比例しているように、線幅を変更したい。)

+0

あなたは、ベクトルベースの出力を使用することができます。図と軸との間のスペース? – tacaswell

答えて

30

これは、インチで幅と高さを与えます。おそらく、あなたの目的には十分ではなく、ピクセルを取得するために

bbox = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted()) 
width, height = bbox.width, bbox.height 

、あなたがfig.dpiを掛けすることができます。たとえば

width *= fig.dpi 
height *= fig.dpi 

import matplotlib.pyplot as plt 

def get_ax_size(ax): 
    bbox = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted()) 
    width, height = bbox.width, bbox.height 
    width *= fig.dpi 
    height *= fig.dpi 
    return width, height 

fig, ax = plt.subplots() 
print(get_ax_size(ax)) 
#(496.0, 384.00000000000006) 

ax2 = plt.axes([0.3, 0.3, 0.7, 0.7]) 
print(get_ax_size(ax2)) 
# (448.0, 336.0) 

To make an image of exactly that figure size、あなたは白を取り除かなければならない

import numpy as np 
import matplotlib.pyplot as plt 

def get_ax_size(ax): 
    bbox = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted()) 
    width, height = bbox.width, bbox.height 
    width *= fig.dpi 
    height *= fig.dpi 
    return width, height 

data = np.arange(9).reshape((3, 3)) 
fig = plt.figure(figsize=(8,6), dpi=80) 
ax = plt.Axes(fig, [0., 0., 1., 1.]) 
ax.set_axis_off() 
fig.add_axes(ax) 
ax.imshow(data, aspect='normal') 
print(get_ax_size(ax)) 
# (640.0, 480.0) 
plt.savefig('/tmp/test.png', dpi=80) 

% identify /tmp/test.png 
/tmp/test.png PNG 640x480 640x480+0+0 8-bit DirectClass 50.5KB 0.020u 0:00.020 
+0

サブプロットでも機能しますか? –

+0

はい、私はそう信じています。私は、この例を任意の下位軸で何が起こるかを示すように変更しました。 – unutbu

+0

うーん、それは完全に正確ではないようですが、私の目的には十分です! –

関連する問題