4

現在、いくつかのサブプロットを使用して(Python-x、y 2.7.2.1を使用して)プロットしていますが、すべてのyラベルを1行にまとめたいと考えています。目盛りラベルのサイズが異なるため、現在はそうではありません。デモンストレーションとして、次のスクリプトを追加します。

    import pylab as P
    import numpy as N

    x = N.linspace(0,2*N.pi,10000)
    y1 = N.sin(x)
    y2 = N.cos(x)*10000

    P.figure()
    ax1 = P.subplot(211)
    P.plot(x,y1,"k-")
    y1 = P.ylabel("$\\sin{(x)}$")
    P.xlim((0,2*N.pi))
    ax2 = P.subplot(212)
    P.plot(x,y2,"k--")
    y2 = P.ylabel("$\\cos{(x)}\\cdot{}10^4$")
    P.xlim((0,2*N.pi))
    P.show()

結果は次のようになります。ラベルが相互にシフトしていることに注意してください。

ラベルが相互にシフトした2つのグラフ

を使ってラベルの位置を設定してみました

    (x,y) = y2.get_position()
    ax1.yaxis.set_label_coords(x,y)

ただし、set_label_coordsは相対座標を必要とし、get_position()はピクセルなどを生成するように見えるため、明らかに異なる座標を使用します。絶望を使ってみてください

    y1.set_x(x); y1.set_y(y)

効果はありませんでした。それで私は自分自身に言いました:専門家に聞いてください-それで私はここにいます。誰かがラベルをシフトする方法を教えてもらえますか?そうすれば、ラベルは互いに一列に並んでいて、期待どおりに見栄えがしますか?

お返事をお待ちしております。

4

2 に答える 2

2

ラベルの位置を次のように埋めることができます

P.ylabel("$\\sin{(x)}$", labelpad=20)

P.ylabel("$\\cos{(x)}\cdot{}10^4$", labelpad=20)

少し調整すれば、これはあなたが望むものを達成するはずです。プロット後に設定することもできます

ax.yaxis.labelpad = 20

軸上の数字の長さが変わると、yラベルが正しく配置されず、ラベルの位置が移動します。軸y上の数値のサイズは、次のように固定できます。y

from matplotlib.ticker import FuncFormatter

def thousands(x, pos):
    'The two args are the value and tick position'
    return '%4.1f' % (x*1e-3)

formatter = FuncFormatter(thousands)

ax = fig.add_subplot(211)
ax.yaxis.set_major_formatter(formatter)

これにより、軸上の数字の長さが常に4文字になることが保証されるため、すべての値のラベルyのオフセットを修正できます。yこの関数で返された文字列を変更してthousands()も、満足できません。

編集

これを実現するさらに別の方法は、set_label_coordsを使用してラベルの位置をハードコーディングすることです。

ax.yaxis.set_label_coords(0.5, 0.5)

私はちょうどその方法を見つけました、そしてそれはあなたにいくらか役に立つかもしれません..!(0,0)は(左、下)、(0.5、0.5)は(中央、中央)などです。

于 2013-02-27T13:10:19.393 に答える
1

danodonovanが言うように、set_label_coordsはそれを行うための可能な方法です。この設定は私にとってうまく機能したと付け加えるかもしれません。

ax7.yaxis.set_label_coords(-0.2, 0.5)

「トリック」は、負の数を使用してラベルをプロットの外に移動することです。

于 2013-03-13T17:50:12.597 に答える