2017-03-29 23 views
0

私は、pyplotを使ってサブプロットをプロットしています。すべてのサブプロットに対してy軸に同じスケールが必要です。私はax.get_ylimとax.set_ylimいじりことを行うことができます。matplotlibを使ってデータポイントを中央に置く方法は?

if ax3.get_ylim()[1]-ax3.get_ylim()[0] < ax1.get_ylim()[1]-ax1.get_ylim()[0]: 
    ax3.set_ylim(ax1.get_ylim()) 
else: 
    ax1.set_ylim(ax3.get_ylim()) 

問題は、私は、データポイントを中心にされていないプロットで終わるです。私が意味することを示すために画像をアップロードすることはできませんが、サブプロットの1つにset_ylimを適用すると、ポイントはプロットの下部または上部に非常に近くなり、不便です。 のデータを中央に配置する方法(つまり、ymax-yminを変更せずに)スケールを変更しますか?

副次的な質問:デフォルトのy制限が厳しい場合があります。軸の制限とデータの制限の間のパディングを自動的に増やすオプションがありますか?

私は、これらの質問に対する簡単な答えをドキュメントで見つけることができないようです。どんな助けもありがとう。

+0

:ここ

は一例です。それをよりよく説明し、問題を示す[mcve]を提供してください。 2番目の質問については、['plt.margins'](http://matplotlib.org/devdocs/api/_as_gen/matplotlib.axes.Axes.margins.html)を使用してください。 – ImportanceOfBeingErnest

+0

ありがとう、私はいくつかの詳細を追加しました。私はplt.marginsを調べましたが、各サブプロットごとに個別に指定する必要があるようです。さらに、私はマージンに特定の値を指定する必要があります。私は[plt.axis( 'tight')](http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axis)の反対のようなより一般的なオプションを望んでいました。 plt.axis( 'loose')か何か... – JohnND

答えて

0

あなたは軸を共有する方法を探しています。例えば、 shared_axis_demo

スクリプトのすべてのプロットに余白を適用するには、rcParamsを使用します。あなたはそれによって何を意味するか、最初の質問「どのようにスケールを変更することなく、自分のデータを中央に」、それはかなり不明確に関する

import matplotlib.pyplot as plt 
import numpy as np 
#set margins for all plots in this script. 
plt.rcParams["axes.xmargin"] = 0.1 
plt.rcParams["axes.ymargin"] = 0.1 

#produce subplots with shared axes 
fig, axes = plt.subplots(2,2, sharex=True, sharey=True) 

for i, ax in enumerate(axes.flatten()): 
    x = np.random.normal(i, size=10) 
    y = np.random.normal(4-i, size=10) 
    ax.scatter(x,y) 

plt.show() 

enter image description here

+0

ありがとう。シェアーオプションは私がやっていたものよりはるかに効率的です。しかし、axes.xmarginはrcParamsで使用できる有効なパラメータのリストにありません。とにかく私の場合は助けになりません。x軸にマージンを追加しますが、y軸にはマージンを追加しません(最大値が1の場合でも)。それは私のy軸上に非常に小さな間隔があるからかもしれません。 – JohnND

+0

マージンはスケール(または間隔)とは無関係です。 rcParam 'axes.xmargin'は** x **軸にマージンを追加し、' axes.ymargin'は** y **軸にマージンを追加します。それらを設定できない場合、あなたのバージョンのmatplotlibは本当に古く、更新を検討するべきです。 – ImportanceOfBeingErnest

+0

plt.marginsの[documentation](http://matplotlib.org/devdocs/api/_as_gen/matplotlib.axes.Axes.margins.html)によれば、_if xmarginはNoneではないので、xmarginはXのデータ間隔になります各エンドに追加することができます_。 y軸が共有されるとき、私のプロットの1つは、プロットされたデータ間隔よりもはるかに大きいyスケールを持つ。だから私がこの権利を得た場合、データ間隔に比例するマージンは実際のプロットのスケールに比べて非常に小さいという結果になります。 – JohnND

関連する問題