2010年9月9日木曜日

matplotlibの日本語表示

Macを使っています。
日本語の表示で苦労しました。例の白抜きの箱が表示されてしまう件です。
最初のトライは

    import os
    os.environ['VERSIONER_PYTHON_PREFER_32_BIT']='yes'
    #t = os.environ['VERSIONER_PYTHON_PREFER_32_BIT']
    import matplotlib
    matplotlib.use('Agg')
    import matplotlib.pyplot as plt
    import numpy as np
    plt.plot([1,2,3,4])
    filename = 'myfig2.png'
    plt.savefig('media/some/charts/'+filename)

これで出力したファイルをDjangoで表示できました。
'VERSIONER_PYTHON_PREFER_32_BITの下りがないと64bitで動くようでimportエラーになります。

次のステップでタイトルやら軸のラベルを表示すると、文字が白抜きになります。


google groupで検索しました。ロシア語が白抜きになるというエントリで次のコードを見つけました。

import matplotlib
matplotlib.use('GTK')
from matplotlib.matlab import *
from matplotlib.font_manager import *
p = FontProperties()
font = {'fontname'   : 'Lucida',
        'color'      : 'r',
        'fontweight' : 'bold',
        'fontsize'   : 16}
plot([1,2,3])
xlabel(u'natê¿enie',font)
ylabel(u'napiêcie',font)
title(u'Wykres z polskimi literkami ±æê³ñ󶿼',font)
show()

ラベル毎にFontを指定しています。
matplotlib.use('GTK')をコメントアウトして、フォントをMacに搭載されているフォントに変更しました。

p = FontProperties()

#font = {'fontname'   : "serif", #dont work
#    font = {'fontname'   : 'sans-selif',   #dont work      
    font = {'fontname'   : 'Hiragino Sans GB',          
            'color'      : 'r',
            'fontweight' : 'bold',
            'fontsize'   : 12}
しかし、次でもOKでした。
    rcParams['font.family'] = 'Hiragino Sans GB'
これはプロセスの環境を変えているので軸毎にFontを指定しなくても良いようです。

さらにHOMEディレクトリに/.matplotlib/matplotlibrcファイルを作ればユーザーのdefaultにできます。
もっとも単純にコピーはできなくてterminalからsudoでコピーしないとだめ。
(この辺りがMacのすごいところでlinuxマシンになる)
さらにpythonのsite-packagesのmatplotlib/mpl-data/matplotlibrcの該当するエントリを編集すればOKでしょうが、ここはいじらないでおきました。


0 件のコメント:

コメントを投稿