![]() |
ノート/Pythonでグラフを描画するhttp://pepper.is.sci.toho-u.ac.jp/pepper/index.php?%A5%CE%A1%BC%A5%C8%2FPython%A4%C7%A5%B0%A5%E9%A5%D5%A4%F2%C9%C1%B2%E8%A4%B9%A4%EB |
![]() |
訪問者数 7806 最終更新 2014-08-04 (月) 16:41:59
なお、別のデータ処理用途で、mint上でヒストグラム描画にも使った
matplotlibのHowTo と [[HowToの中のWebアプリサーバーを作る方法:http://matplotlib.org/faq/howto_faq.html#matplotlib-in-a-web-application-server
Cookbook - MatPlotLibをCGI Scriptで使う
Numpyが必要
次にmatplotlibのインストール
で、matplotlibのテスト
>>> import matplotlib >>> matplotlib.use('Agg') >>> import matplotlib.pyplot as plt >>> fig = plt.figure() >>> ax = fig.add_subplot(111) >>> ax.plot([1,2,3]) >>> fig.savefig('test.png')
を実行すると、直線グラフが描けた。
次に、CGIとして動作させたいときのやり方。
#!/usr/bin/python import os,sys import cgi import cgitb; cgitb.enable() # set HOME environment variable to a directory the httpd server can write to os.environ[ 'HOME' ] = '/tmp/' import matplotlib # chose a non-GUI backend matplotlib.use( 'Agg' ) import pylab #Deals with inputing data into python from the html form form = cgi.FieldStorage() # construct your plot pylab.plot([1,2,3]) print "Content-Type: image/png\n" # save the plot as a png and output directly to webserver pylab.savefig( sys.stdout, format='png' )
参照
いろいろあるが、基本は、
1)フォントそのものを入れる必要がある。黙っていてVL Gothicフォントが入っているはず。
ここ ...\Python26\Lib\site-packages\matplotlib\mpl-data\fonts\ttf にもコピーがいるという説あり。Linuxではそうでもなさそう。
2)matplotlibのconfigファイルにフォント指定。基本は自前環境 ($HOME)/.matplotlib/matplotlibrc を修正。下記2行をFONTセクションに追加。
font.serif : VL Gothic font.sans-serif : VL Gothic
3)漢字を表示したいプログラム上で、
import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt ... 好きなことをやって x.hist() " ヒストグラムを生成 plt.title(u"図のタイトル", fontname="VL Gothic", size=10) #ここで漢字用のフォント指定 plt.show() plt.savefig("filename.png") plt.clf()
とすればよい。fontname指定を忘れると出ないようだ。デフォルトのフォント指定ができるのかも知れない。
参照
で、簡単には、subplotを使うのがよさそうとのこと。具体的には、
list = ["意欲_偏差値", "学びへの意識(%)", "進路総合(%)", "自己理解(%)", "6_復習をした", "5_宿題・課題はきちんとやった", "Q35 機会があれば、外国で勉強や仕事をしてみたい"] for u in list: subplot(3, 3, i) # 画面を3×3に分割、その中のi番目の図をこれから描くぞ plt.title(u.decode("utf-8"), fontname="VL Gothic", size=10) x[u].hist() plt.show() # 全部まとめて表示 plt.savefig("hist.png") plt.clf()
だと、listが7要素なので3×3のうち7つだけ埋まる。
たくさん図を入れると、図と図の間隔を調整しなければならないことがある。予め
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.2, hspace=0.4)
などとすると、横方向の図の間隔を0.2に、縦方向を0.4にしてくれる。
たくさん図を入れると、軸の目盛の文字のフォントが大きすぎることになる。これを修正するのに1つ1つ面倒だという話になるが、デフォルトを変えてしまうことができる。
参照 ⇒ matplotlib の下の方
一時的にデフォルト値を変更する。 一時的に値を変更することもできる。繰り返し操作を行う際などで便利。 スクリプトか対話モードが終了するかデフォルトファイルの再読み込みをするまで有効。 import matplotlib as mpl mpl.rc('lines', linewidth=2, color='r') font = {'family' : 'monospace', 'weight' : 'bold', 'size' : 'larger'} mpl.rc('font', **font)
実際に使ってみたのは、
font = {'family': 'VL Gothic', 'size': '9' } matplotlib.rc('font', **font)
という感じ