2013-02-07 8 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 있습니다. 그 중 하나는 figsize입니다. 당신이 self.fig = plt.figure()subplots 후, 올바르게, 두 번째 그림이 나타납니다 호출하면 그림이

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

을 만든 후에는

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

이 그렇지 않으면 당신은 그림의 방법을 사용할 수 있습니다 할 수 있습니다. 그리고 모든 버튼을 self.fig에 추가하면 모두 마지막으로 정의 된 버튼으로 이동합니다. 마침내

: 그것은

편집 이 (마지막 문장을 자세히 설명) 다른 모든 축이 더 일관된하고 자신의 위치에 대한 자세한 제어 할, add_axes와 self.ax을 만들 아마 더 좋을 것이다

self.axmatplotlib.axes.AxesSubplot 객체 (이 예에서 plt.subplot(111), while all the buttons are added to matplotlib.axes.Axes objects (created with add_axes`을 얻을 것이라고 동일)입니다.

그림 크기가 변경되거나 창 크기가 변경되는 경우 축과 하위 그림을 함께 사용하면 단추 및 슬라이더에 대한 그림의 상대 위치에 문제가 발생할 수 있습니다.

나는 그림 캔버스 공간의 일관된 부문 등 발생할 수있는 문제를 방지하기 위해 더 나은 것 axes 또는 subplots를 사용하여 하나라고 생각합니다. 그래서 플롯 축을 self.ax = fig.add_axes(...)으로 만들거나 gridspec과 같은 것을 사용하는 것이 좋습니다.

+0

add_axes를 사용하여 도끼를 만들 때 마지막 점을 자세히 설명해 주시겠습니까 – moadeep

+1

@moadeep : 좀 더 많은 정보를 추가했습니다. 이 내용이 내 성명을 분명히하기를 바랍니다. –

+0

크게 개선되었습니다. 감사 – moadeep

2

plt.figure를 호출 할 때마다 새로운 그림의 인스턴스를 생성합니다. 당신이 원하는 것은 기존 그림을 수정하는 것입니다. 그림 인스턴스에서 사용할 수있는 방법으로이 작업을 수행 할 수 있습니다. 이 질문과 직접 ​​관련이있는 두 가지는 set_figwidth, set_figheightset_facecolor입니다.

HTH

+0

"plt.figure를 호출 할 때마다 새로운 그림 인스턴스가 생성됩니다.": 그림 번호를 지정하지 않은 경우에만 true입니다. 그렇지 않으면 그림 번호에 초점을 다시 부여합니다 # –

관련 문제