2

私が開発している小さなモジュール(コードを追加)にmatplotlib.pyplotを使用しています。ただし、フィギュアをカスタマイズする方法(フィギュアのサイズを大きくする、背景のキャンバスの色を変更する)がわかりません。これを行うにはどうすればよいですか。試してみfig = plt.figure(figsize=(16,8))ましたself.fig, self.ax = plt.subplots()が、これによりフィギュアのサイズが大きくなり、ボタンが追加されますが、別のフィギュアにプロットが表示されます。私の単純な間違いは何ですか?

ここに画像の説明を入力してください

    # Setup the axes.
    self.fig, self.ax = plt.subplots()
    self.slider_ax    = self.fig.add_axes([0.2, 0.03, 0.65, 0.03])
    self.delete_ax    = self.fig.add_axes([0.85, 0.84, 0.1, 0.04])
    self.register_ax  = self.fig.add_axes([0.85, 0.78, 0.1, 0.04])
    self.add_ax       = self.fig.add_axes([0.85, 0.72, 0.1, 0.04])
    self.save_ax      = self.fig.add_axes([0.85, 0.66, 0.1, 0.04])
    self.reset_ax     = self.fig.add_axes([0.85, 0.16, 0.1, 0.04])
    self.quit_ax      = self.fig.add_axes([0.85, 0.1,  0.1, 0.04])

    # Make the slider
   ! self.slider = Slider(self.slider_ax, 'Frame', 0, 1, 
                        valinit=0, valfmt='%1.2f', closedmin=True,
                        closedmax=False)
    self.slider.on_changed(self.update)

    #Make the buttons
    self.del_button = Button(self.delete_ax, 'Delete')
    self.del_button.on_clicked(self.delete)
    self.reg_button = Button(self.register_ax, 'Register')
    self.reg_button.on_clicked(self.register)
    self.add_button = Button(self.add_ax, "Add")
    self.add_button.on_clicked(self.add)
    self.save_button = Button(self.save_ax, "Save")
    self.save_button.on_clicked(self.save)
    self.quit_button = Button(self.quit_ax, "Quit")
    self.quit_button.on_clicked(self.quit)
    self.reset_button = Button(self.reset_ax, "Reset")
    self.reset_button.on_clicked(self.reset)


    # Plot the first slice of the image
    self.im = self.ax.imshow(np.array(raw_dicom_stack[0]), cmap = cm.gray)
4

2 に答える 2

4

plt.subplotsには**fig_kw、Figureに送信できるすべてのキーワード引数が含まれています(Figureのドキュメントを参照)。それらの1つはですfigsize。できるよ

self.fig, self.ax = plt.subplots(figsize=(16,8), ...)

それ以外の場合は、Figureが作成されたら、Figureメソッドを使用できます

self.fig.set_size_inches(16,8, forward=True)

self.fig = plt.figure()後に呼び出すとsubplots、正しく、2番目の図が表示されます。そして、にすべてのボタンを追加するとself.fig、それらはすべて最後に定義されたボタンに移動します。

最後に:add_axesを使用してself.axを作成し、他のすべての軸とより一貫性を保ち、彼の位置をより細かく制御する方がおそらく良いでしょう。

編集 (最後の文を詳しく説明します)

self.axmatplotlib.axes.AxesSubplotオブジェクトです(たとえば、matplotlib.axes.Axes add_axes`から取得するものと同じですplt.subplot(111), while all the buttons are added toobjects (created with

軸とサブプロットを組み合わせると、図のサイズが変更されたり、ウィンドウのサイズが変更されたりした場合に、ボタンとスライダーに対するプロットの相対位置に問題が生じる可能性があります。

このような問題を回避するには、axesまたはを使用して、フィギュアキャンバス内のスペースを一貫して分割する方がよいと思います。subplotsしたがって、プロット軸をとして作成するか、 gridspecself.ax = fig.add_axes(...)のようなものを使用することをお勧めします。

于 2013-02-07T12:28:19.863 に答える
2

を呼び出すたびにplt.figure、新しいFigureインスタンスが作成されます。あなたがしたいのは、既存の図を変更することです。これは、Figureインスタンスで使用可能なメソッドを使用して実行できます。この質問に直接関連する2つは、 set_figwidthset_figheight、およびset_facecolorです。

HTH

于 2013-02-07T12:26:58.267 に答える