2017-06-12 4 views
1

以下のコードでは、テキストラベルの高さを取得するためにget_window_extent()を使用しています。私は画面の表示とフォントサイズを1:1の関係にするために、figure dpi値を72 dpiに設定しました。私の期待は、get_window_extent()で検索された値がテキストポイントのサイズ値と一致するということです。matplotlib get_window_extent()が不正なテキストの高さを取得する

これをテストするために、サイズを増やすテキストラベルのセットを描画するためのループを作成し、get_window_extent()で取得した値が一部のフォントサイズに一致しますが、他のフォントサイズでは一致しません。ここで

は、以下のコードによって生成された出力です:

Font Size 
Set Returned 
9 9.0 
10 10.0 
11 10.0 
12 13.0 
13 13.0 
14 14.0 
15 15.0 
16 15.0 
17 18.0 
18 18.0 

どちらかの図のDPI設定が72 dpiで、実際にはない、またはその何かがget_window_extent()方法と間違っていることが表示されます。

WXaggバックエンドを使用して、MacOS 10.12.5でMatplotlib 1.5.0を実行しています。なぜこれが起こっているかのようなアイディアは大歓迎です。

import matplotlib as mpl 
mpl.use('wxagg') 
import matplotlib.pyplot as plt 

# points per inch 
points_per_inch = 72 

# set figure size in inches 
myfsize = (8, 6) 

# create figure and subplot axes matrix 
myfig, ax = plt.subplots(1, 1, dpi=72, figsize=myfsize) 

# adjust subplot spacing 
plt.subplots_adjust(wspace=0.04, hspace=0.04, right=0.8, 
        bottom=0.1, top=0.9, left=0.125) 

# draw canvase to get positions 
plt.gcf().canvas.draw() 

string = 'curve' 

print 
print 'Font Size' 
print 'Set', '\t', 'Returned' 

# loop over a range of font sizes and print retrieved font size 
for i in range(10): 
    text_size = 9 + i 
    text_position = i/10.0 
    txt = ax.text(0.0, text_position, string, fontsize=text_size, 
        transform=ax.transAxes) 
    plt.gcf().canvas.draw() 
    txt_height_display = txt.get_window_extent().height 
    print text_size, '\t', txt_height_display 

plt.show() 

答えて

0

テキストを画面ピクセルに離散化するため、フォントで塗りつぶしたピクセル数とフォントサイズの間には常に偏差が存在する可能性があります。この偏差は、それぞれの側に1つずつ、2ピクセルアップすることができる。
私はあなたが得た結果によって心配しないでください。

+0

ありがとう、私は17と18のポイントサイズで2つの色の同じ位置に2つの同じ文字列をプロットし、高さが画面上で同じであることを確認しました(幅は異なります)。 – jkueng

関連する問題