2

私はいくつかのソースからのデータをプロットしていて、複数のx軸、できればリンクに見られるようなオフセットが必要です。x軸の長さを可変にして、同じ図に多くのプロットを配置できるようにしたいと思います。私がこれまでに行ったことは次のとおりです。

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA
host = host_subplot(111, axes_class=AA.Axes,yscale='log')
plt.subplots_adjust(bottom=0.25)

par1 = host.twiny()

offset = 60

new_fixed_axis = par1.get_grid_helper().new_fixed_axis
par1.axis['bottom'] = new_fixed_axis(loc='bottom',
                                     axes=par1,
                                     offset=(0, -60))

host.set_xlim(200, 350)
host.set_ylim(1050, 100)
par1.set_xlim(0, 1)

host.set_xlabel('Temperature (K)')
host.set_ylabel('Pressure (hPa)')
par1.set_xlabel('Relative Humidity (%)')

p1, = host.plot(T,P)
p2, = host.plot(pT,P)
p2, = par1.plot(RH,P)

したがって、軸をドロップダウンさせることができますが、私の人生では、軸を実際に水平方向に圧縮する方法を理解することはできません(たとえば、上のリンクされた図の青い軸のように)。

私の質問は、これをどのように行うことができるかです(もしあれば)?


@ Oz123

これが私が持っているものです:

host = host_subplot(111, axes_class=AA.Axes,yscale='log')
plt.subplots_adjust(bottom=0.25)

par1 = host.twiny()

new_fixed_axis = par1.get_grid_helper().new_fixed_axis

cax1 = plt.axes(axisbg='none',frameon=False)
cax1 = plt.add_axes(plt.get_position(), frameon=False)
par1.axis['bottom'] = new_fixed_axis(loc='bottom',
                                     axes=cax1,
                                     offset=(0, -60))

私が着いたとき:

cax1 = plt.add_axes(plt.get_position(), frameon=False)

以前のx/y軸が消え、cax1のみの灰色の画面が残ります。

申し訳ありませんが、matplotlibを入手しているところなので、まだかなりの初心者です。

4

1 に答える 1

1

par1.axis['bottom']主要なオブジェクトで作成しているaxため、実際にできることはかなり限られています。
代わりに、2 つ以上のaxesインスタンスを作成する必要があります。そして、それらを図のインスタンスに置きます。

新しい軸インスタンスの追加

cax1 = plt.axes(axisbg='none', frameon=False)

このように、湿度スケールのサイズを細かく制御できます。

次の行:

par1.axis['bottom'] = new_fixed_axis(loc='bottom',
                                     axes=par1,
                                     offset=(0, -60))

たとえば、次のようにする必要があります。

par1.axis['bottom'] = new_fixed_axis(loc='bottom',
                                     axes=cax1, # custom axis number 1
                                     offset=(0, -60))

IPythonを使用すると、新しく作成した軸インスタンスを制御するために使用できるメソッドをすばやく見つけることができます。

In [38]: cax1.set_ #tab pressed
cax1.set_adjustable            cax1.set_axis_bgcolor          cax1.set_frame_on              cax1.set_subplotspec           cax1.set_xticks
cax1.set_agg_filter            cax1.set_axis_off              cax1.set_gid                   cax1.set_title                 cax1.set_ybound
cax1.set_alpha                 cax1.set_axis_on               
# many more options trimmed, but I think you might want to take a look in:

新しく作成したインスタンスの場所を制御します:

In [38]: cax1.set_position?
Type:       instancemethod
String Form:<bound method AxesSubplot.set_position of <matplotlib.axes.AxesSubplot object at 0x2d7fb90>>
File:       /usr/lib/pymodules/python2.7/matplotlib/axes.py
Definition: cax1.set_position(self, pos, which='both')
Docstring:
Set the axes position with::

  pos = [left, bottom, width, height]
于 2012-09-18T09:01:56.050 に答える