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所有可以发送到图形的关键字参数(参见图文档)。其中之一是figsize。你可以做

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

否则,您可以在创建图形后使用图形方法

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

如果您正确调用self.fig = plt.figure()after subplots,则会出现第二个数字。当您将所有按钮添加到 时self.fig,它们都将转到最后定义的位置。

最后:使用 add_axes 创建 self.ax 可能会更好,与所有其他轴更加一致,并且可以更好地控制他的位置

编辑 (详细说明最后一句话)

self.ax是一个matplotlib.axes.AxesSubplot对象(与您从例如plt.subplot(111), while all the buttons are added tomatplotlib.axes.Axes objects (created withadd_axes` 获得的相同)。

如果更改图形大小或调整窗口大小,将轴和子图放在一起可能会导致图相对于按钮和滑块的相对位置出现问题。

我认为图形画布中空间的一致划分,使用axessubplots,会更好地避免此类可能出现的问题。所以我建议要么创建绘图轴,self.ax = fig.add_axes(...)要么使用类似gridspec的东西。

于 2013-02-07T12:28:19.863 回答
2

每次调用plt.figure都会创建一个新的图形实例。您要做的是修改现有图形。您可以使用图形实例上可用的方法来执行此操作。与这个问题直接相关的两个是set_figwidthset_figheightset_facecolor

高温高压

于 2013-02-07T12:26:58.267 回答