2013-02-07 72 views
2

我正在使用matplotlib.pyplot爲我開發的一個小模塊(附加代碼)。但是,我無法弄清楚如何自定義圖形(增加圖形大小,更改背景畫布顏色)。我該怎麼做呢。我在self.fig, self.ax = plt.subplots()之後嘗試過fig = plt.figure(figsize=(16,8)),這確實增加了圖形大小並添加了我的按鈕,但是以單獨的圖形顯示了我的情節。我的簡單錯誤是什麼?定製matplotlib圖

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) 

回答

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時,它們都會轉到最後定義的按鈕。

最後:這將是可能更好地創造self.ax與add_axes,是與所有其它軸更連貫和對他的定位更多的控制

編輯 (細說最後一句)

self.axmatplotlib.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的東西。

+0

您可以詳細說明使用add_axes創建斧頭的最後一點嗎? – moadeep

+1

@moadeep:我已經添加了一些更多信息。我希望這可以澄清我的聲明 –

+0

這大大地清除了事情。謝謝 – moadeep

2

plt.figure每次調用將創建一個新的數字實例。你想要做的是修改現有的數字。你可以用你的figure實例中可用的方法來做到這一點。與這個問題直接相關的兩個是set_figwidth,set_figheightset_facecolor

HTH

+0

「每次調用plt.figure都會創建一個新的圖形實例」:只有在不指定圖形編號時才爲true。否則,它將重點放在圖號# –