2017-11-03 17 views
1

matplotlibを使用して生成され保存された図形から垂直方向の空白を削除する方法を見つけようとしています。基本的に、軸の上下の空白。画像から垂直方向の空白を削除する方法

私のユースケースにrequiremensは以下の通りである:y軸は

  • 保存しなければならないカスタマイズスケーリングを有していてもよい

    • (外側に)その上図の凡例があるかもしれません
    • x軸とy軸には切り抜かないラベルが付いています。
    • 水平方向ではなく垂直方向の空白のみを削除します。さもなければ、これは細長いx軸につながるでしょう。

    次のコマンドを実行すると、非常に近く来て、垂直方向の空白を削除しますが、それはまた、水平方向の空白を削除します。

    myFigure.savefig(myImagePath, bbox_inches='tight') 
    

    最適解が唯一yにbbox_inches='tight'のアルゴリズムを適用することであろうプロットの - 軸...

  • +1

    正確な条件はここにありますか?先日、別の[類似の質問](https://stackoverflow.com/questions/47083648/save-matplotlib-plot-with-legend-on-the-right-in-predefined-width-height-ratio)に回答しました。 [この質問](https://stackoverflow.com/questions/42994338/creating-figure-with-exact-size-and-no-padding-and-legend-outside-the-axes)の回答も適応させることができます。あなたがあなたの質問を更新することができれば、それらがどれくらい遠くにあるか助けにならないかということを伝えるのが良いでしょう。 – ImportanceOfBeingErnest

    +0

    'plt.subplots_adjust(top = 0.95)'ではないでしょうか? – DavidG

    +0

    @ImportanceOfBeingErnestリンクありがとうございました。最初のものは私には新しいものです。確認してみるよ。私も見つけたが、それは私を助けませんでした。しかし、私は再びそれを見ます。これまで私が試したことは、更新された質問に記載されている要件の少なくとも1つを満たしていませんでした。 – Rickson

    答えて

    1

    コメントの中で述べたように、あなたは通常、選択した方向にスペースがないようにFigureのサイズとsubplotparamsを設定します。 yaxisのサイズが保持される必要がある場合は、最初に長さを計算してから、Figureのサイズとサブプロットのパラメータを調整して、軸の長さを同じにします。個々の場合で決定される必要がtop = 0.94; bottom=0.09値もちろん

    import matplotlib.pyplot as plt 
    fig, ax = plt.subplots(figsize=(5,6), dpi=50) 
    ax.plot([1,2]) 
    ax.set_ylabel("ylabel") 
    ax.set_xlabel("xlabel") 
    
    ### 1. Original image 
    ax.set_title("original") 
    plt.savefig("fsi01.png", facecolor="#edf9f9") 
    ### 2. tight bbox 
    ax.set_title('bbox_inches="tight"') 
    plt.savefig("fsi02.png", facecolor="#edf9f9", bbox_inches="tight") 
    
    ### 3. Only vertical adjustent 
    axes_height = fig.get_size_inches()[1]*(fig.subplotpars.top-fig.subplotpars.bottom) 
    
    top = 0.94; bottom=0.09 
    fig.subplots_adjust(top=top,bottom=bottom) 
    fig.set_size_inches((fig.get_size_inches()[0],axes_height/(top-bottom))) 
    
    ax.set_title('only vertical adjust') 
    plt.savefig("fsi03.png", facecolor="#edf9f9") 
    
    plt.show() 
    

    enter image description here enter image description hereenter image description here

    +0

    これは素晴らしいことです。どうもありがとうございました。 – Rickson

    0

    あなたは(あなたがPLTとしてpyplotを使用していると仮定)オートスケールを使用するワン

    plt.autoscale(enable=True, axis='y', tight=True) 
    
    +0

    あなたの答えをありがとう。しかしこれは、y軸の任意のカスタマイズされたスケーリングを除去する。 – Rickson

    関連する問題