自定义matplotlib图

时间:2013-02-07 11:28:23

标签: python matplotlib

我正在使用matplotlib.pyplot来处理我正在开发的一个小模块(附加代码)。但是,我无法弄清楚如何自定义图形(增加图形大小,更改背景画布颜色)。我该怎么做呢。我在fig = plt.figure(figsize=(16,8))之后尝试了self.fig, self.ax = plt.subplots(),这确实增加了数字大小并添加了我的按钮,但在一个单独的数字上显示了我的情节。我的简单错误是什么?

enter image description here

    # 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)

2 个答案:

答案 0 :(得分:3)

plt.subplots**fig_kw,其中包含可以发送到图中的所有关键字参数(参见图doc)。其中一个是figsize。你可以做到

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

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

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

如果您在self.fig = plt.figure()之后正确拨打subplots,则会显示第二个数字。当您将所有按钮添加到self.fig时,它们都会转到最后定义的按钮。

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

修改 (详细说明最后一句)

self.ax是一个matplotlib.axes.AxesSubplot对象(与plt.subplot(111), while all the buttons are added to matplotlib.axes.Axes objects (created with add_axes`相同。

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

我认为使用axessubplots对图形画布中的空间进行一致划分会更好地避免出现这样的问题。因此,我建议将绘图轴创建为self.ax = fig.add_axes(...)或使用类似gridspec的内容。

答案 1 :(得分:2)

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

HTH