7

matplotlibデータ単位を正規化された単位に変換する方法を知っている人はいますか?

それが必要な理由は、別のプロットの上にサブプロットを作成する必要があるためです。そしてデフォルトの構文:

plt.axes([0.1,0.1,0.3,0.3])

正規化された座標が必要ですが、データ座標を使用したいと思います。

たとえば、次のコード:

  plt.plot([0,2],[2,4]);
  plt.axes([0.3,.3,0.4,.4])

これを生成します:

ここに画像の説明を入力してください ただし、[0.7,2.5,1.7,3.5]のように、サブプロットのデータ座標を使用してサブプロットの位置を定義できるようにしたいと思います。axis.transData、axes.get_transform()などをいじろうとしましたが、その仕事をするための適切な関数を見つけることができませんでした。

4

1 に答える 1

13

これを行う1つの方法は次のとおりです。

内側は(外側の座標で)axes印刷されます0.5, 2.5, 1.0, 0.3axes

0.5、2.5、1.0、0.3で印刷された内軸(外軸座標で)

基本的に2つの変換が必要です。1つはsrc-coordsからdisplayへ、もう1つはdisplayからdest-coordへの変換です。ドキュメントから、直接的な方法はないようです:http:
//matplotlib.org/users/transforms_tutorial.html

bb_data = Bbox.from_bounds(0.5, 2.5, 1.0, 0.3)
disp_coords = ax.transData.transform(bb_data)
fig_coords = fig.transFigure.inverted().transform(disp_coords)

axそしてfig両方ともそれらと一緒に変圧器を運びます-表示するために-座標!
それらを呼び出すとinverted、逆方向のトランスを取得します。

上記の例の完全なコードは次のとおりです。

import matplotlib.pyplot as plt
from matplotlib.transforms import Bbox

plt.plot([0,2], [2,4])
fig = plt.gcf()
ax = plt.gca()

bb_data = Bbox.from_bounds(0.5, 2.5, 1.0, 0.3)
disp_coords = ax.transData.transform(bb_data)
fig_coords = fig.transFigure.inverted().transform(disp_coords)

fig.add_axes(Bbox(fig_coords))

plt.show()
于 2013-01-28T20:27:59.523 に答える