examplesを見るとmpl_toolkits.axes_grid.parasite_axesというのを使うのが推奨されているっぽいのだけど、Ubuntuにインストールされている0.98.5.2では使えないのかな?
困ったのですが、これ(*1)を参考にいじったらうまくいきました。
import matplotlib.pyplot
figure = matplotlib.pyplot.figure()
ax1 = figure.add_subplot(111)
ax2 = ax1.twiny()
def update_ax2(ax1):
def Tr(x):
return x-offset
x1, x2 = ax1.get_xlim()
ax2.set_xlim(Tr(x1), Tr(x2))
y1, y2 = ax1.get_ylim()
ax2.set_ylim(y1, y2)
ax2.figure.canvas.draw()
ax1.callbacks.connect("xlim_changed", update_ax2)
ax1.semilogy(vals)
ax2.semilogy(vals[0:0])
matplotlib.pyplot.show()
実は本当のネックは、semilogyでグラフを書こうとするとax1とax2でY軸に違う目盛を描画してしまう所なのでした。ax1は片対数で描くけどax2では片対数属性が引き継がれないので。面倒なので、ax2にはデータ数0個の片対数グラフを描かせる事で対応しました。
[追記]
ax2に0個のデータを渡すとスケーリングがマズいっぽい。それ以前にリスケーリングがおかしくなる。このエントリーは無しの方向で orz
0 件のコメント:
コメントを投稿