2017-08-09 21 views
1

この図では、フレームを表示したいと思います。matplotlib図にフレームを描く方法

ax = self.canvas.figure.add_subplot(111) 
ax.spines['top'].set_visible(True) 
ax.spines['right'].set_visible(True) 
ax.spines['bottom'].set_visible(True) 
ax.spines['left'].set_visible(True) 
ax.plot(diff) 

私も試してみました:

plt.tight_layout() 

が、それはこのエラーを生成します。

> File "runme.py", line 54, in autocorr_function 
>  plt.tight_layout() File "/usr/local/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 
> 1406, in tight_layout 
>  fig.tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect) File "/usr/local/lib/python2.7/dist-packages/matplotlib/figure.py", 
> line 1753, in tight_layout 
>  rect=rect) File "/usr/local/lib/python2.7/dist-packages/matplotlib/tight_layout.py", 
> line 326, in get_tight_layout_figure 
>  max_nrows = max(nrows_list) ValueError: max() arg is an empty sequence 

あなたの助けをいただければ幸い私は以下のコードを実行しようとしたが、それdidntの仕事 enter image description here 、 ありがとうございました。

EDIT:

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 

import matplotlib.pyplot as plt from PyQt4 import QtGui 

class Canvas(FigureCanvas): 

    def __init__(self, parent=None): 
     self.figure = plt.figure()  #plt.tight_layout(pad=4) 
     FigureCanvas.__init__(self, self.figure) 
     self.setParent(parent) 
     FigureCanvas.setSizePolicy(self, 
           QtGui.QSizePolicy.Expanding, 
           QtGui.QSizePolicy.Expanding) 
     FigureCanvas.updateGeometry(self) 
+1

あなたは孤児のmatplotlibの図の中にプロットしていないようですが、GUIのキャンバス内にあります。もっと情報が必要です。 tight_layoutは、Figureフレーム内の軸を伸ばす図形メソッドです。境界線ではありません。 – Wli

+0

私はキャンバスのコードを追加しました。 –

+0

キャンバスは何のために必要ですか?なぜplt.plot(...)を使ってプロットしないのですか? – 2Obe

答えて

3

境界(又はスパイン)既に表示が、白色である:ここではキャンバスのコードです。この応答で説明したようにあなたは、色を変更する必要があります。https://stackoverflow.com/a/43265998/1773344

グレーのいくつかの種類のための例:

ax.spines['bottom'].set_color('0.5') 
ax.spines['top'].set_color('0.5') 
ax.spines['right'].set_color('0.5') 
ax.spines['left'].set_color('0.5') 

あなたが軸を中心国境をしたい場合は、簡単な解決策はありません。おそらく、この答えに部分的に説明されているように、調整された境界線を持つ軸の内側に軸を置いている場合を除きます。https://stackoverflow.com/a/22608025/1773344

2

主なポイントは、あなたが海軍または少なくとも海賊のダークグリッドスタイルを使用しているようです。これが本当に必要な場合でも、軸の周りに境界線が必要な場合は、スタイルを変更する必要があります。

plt.rcParams["axes.edgecolor"] = "black" 
plt.rcParams["axes.linewidth"] = 1 

(@Wliが言及されるように)これは、this answerで説明。

これはすべてtight_layoutから独立しています。 plt.tight_layout()が示されたエラーを生成する理由は、手元の情報では確かに判断できません。しかし、GUIのpyplotを使用するよりも、Figureのメソッドを呼び出す方が一般的です。だから、代わりにself.canvas.figure.tight_layout()を試してみてください。

関連する問題