-1

私の質問の焦点は、右側の y 軸の制限を制御することに関係しています。コード:

if y2_lim != None:
    par2.set_ylim(y2_lim)

プロット呼び出しの前後には影響しません。私は困惑しています。入力ヘルプ、特に機能しない理由の説明をいただければ幸いです。この種の難問は、Matplotlib で頻繁に発生します。ありがとう、チャールズ

from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA
import matplotlib.pyplot as plt

def plotTwoAxis(aData1, aData2, anXLabel, aY1Label, aY2Label, aTitle, 
                aSubtitle, aLegend1Label, aLegend2Label, y1_lim = None, y2_lim = None):

host = host_subplot(111, axes_class=AA.Axes)

par1 = host.twinx()
par2 = host.twinx()

offset = 60
new_fixed_axis = par2.get_grid_helper().new_fixed_axis
par2.axis["right"] = new_fixed_axis(loc="right",
                                    axes=par2,
                                    offset=(offset, 0))

par2.axis["right"].toggle(all=True)

host.set_xlim(0, 24)

host.set_xlabel(anXLabel)
host.set_ylabel(aY1Label)
par1.set_ylabel(aY2Label)

if y1_lim != None:
    par1.set_ylim(y1_lim)
if y2_lim != None:
    par2.set_ylim(y2_lim)

p1, = host.plot(time, aData1, label=aLegend1Label)
p2, = par1.plot(time, aData2, label=aLegend2Label)

host.legend()

host.axis["left"].label.set_color(p1.get_color())
par1.axis["right"].label.set_color(p2.get_color())

plt.title(aTitle + aSubtitle)

plt.draw()
plt.show()
4

1 に答える 1

0

bottomメソッドに引数を指定しただけset_ylimです。set_ylimまた、軸のオートスケールを無効にしていない場合は、プロットの後にメソッドを呼び出す必要があります。y 軸の下限をデフォルトの 0 にしたい場合、uo は次のようにコードを変更できます。

from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA
import matplotlib.pyplot as plt

def plotTwoAxis(aData1, aData2, anXLabel, aY1Label, aY2Label, aTitle, 
                aSubtitle, aLegend1Label, aLegend2Label,
                y1_bottom = 0, y1_lim = None, # bottom and top limits respectively
                y2_bottom = 0, y2_lim = None): # bottom and top limits, respectively

    host = host_subplot(111, axes_class=AA.Axes)

    par1 = host.twinx()
    par2 = host.twinx()

    offset = 60
    new_fixed_axis = par2.get_grid_helper().new_fixed_axis
    par2.axis["right"] = new_fixed_axis(loc="right",
                                    axes=par2,
                                    offset=(offset, 0))

    par2.axis["right"].toggle(all=True)

    host.set_xlim(0, 24)

    host.set_xlabel(anXLabel)
    host.set_ylabel(aY1Label)
    par1.set_ylabel(aY2Label)

    p1, = host.plot(time, aData1, label=aLegend1Label)
    p2, = par1.plot(time, aData2, label=aLegend2Label)

    if y1_lim != None:
        par1.set_ylim(y1_bottom, y1_lim)
    if y2_lim != None:
        par2.set_ylim(y2_bottom, y2_lim)

    host.legend()

    host.axis["left"].label.set_color(p1.get_color())
    par1.axis["right"].label.set_color(p2.get_color())

    plt.title(aTitle + aSubtitle)

    plt.draw()
    plt.show()

これにより、目的の y 制限で出力が作成されます。

import numpy as np

time = np.arange(25)

plotTwoAxis(np.random.rand(25),
            np.random.rand(25),
            'x label 1', 'y label 1', 'y label 2','Title', ' Subtitle',
            'Plot 1','Plot 2', y1_lim = 0.5, y2_lim = 0.75 )

ここに画像の説明を入力


余談ですが; これは、タイトルとサブタイトルに関してあなたが望む動作ですか?

于 2013-07-16T14:33:11.863 に答える