matplotlibで2軸グラフと標準偏差付きのグラフを書く
研究で使用したので、自分用のメモで。ここらへんを参考にしてみた。
http://chick.g.hatena.ne.jp/allegro/20091010/p5
http://matplotlib.org/examples/api/fahrenheit_celcius_scales.html
http://matplotlib.org/examples/pylab_examples/errorbar_demo.html
http://www.comp.tmu.ac.jp/shintani/japanese/openUniversity/node31.html
http://w.livedoor.jp/met-python/d/matplotlib#content_5_14
個人的に軸やラベルのフォントサイズがどうにかしたかったので、試行錯誤してたらこんなんでうまく行った。
# -*- coding: utf-8 -*- import matplotlib.pyplot as plt parameter_list = [(dim, kids_rate) for dim in [2, 3, 5, 10, 20, 50] for kids_rate in [6, 10, 20, 50, 100]] for dimension, kids_rate in parameter_list: #prepare for data data_set = [map(float, line.strip().split(",")) for line in open("../result_d%d_kr%d.txt" % (dimension, kids_rate)).readlines()] Crs = [item[0] for item in data_set] successRates = [item[1] for item in data_set] means = [item[2] for item in data_set] variances = [item[3] for item in data_set] #prepare for plot fig = plt.figure() ax1 = fig.add_subplot(111) ax2 = ax1.twinx() fs_num = 16 ax1.errorbar(Crs, means, fmt='-r', yerr=[variances, variances], lw = 4) plt.setp(ax1.get_xticklabels(), fontsize=fs_num, visible=True) plt.setp(ax1.get_yticklabels(), fontsize=fs_num, visible=True) ax2.plot(Crs, successRates, '-b', lw = 4) plt.setp(ax2.get_yticklabels(), fontsize=fs_num, visible=True) fs_label = 20 ax1.set_xlabel('Cr', fontsize = fs_label) ax1.set_ylabel('# of generation', fontsize = fs_label) ax1.set_xlim(0.0, 0.9) ax2.set_ylabel('success rate', fontsize = fs_label) ax2.set_ylim(0.8, 1.0) ax1.grid(True) plt.savefig('graph_d%d_kr%d.eps' % (dimension, kids_rate)) plt.clf()
重要なのは、ax1.set_xlabelとかplt.setpあたりで、ここでフォントサイズの調整をしてる。
かなり無理やりな感じもあるが、上手くいったからしばらくこれでやってみる。