복붙노트

[PYTHON] 제목과 xlabels가 겹치지 않도록 Matplotlib subplots_adjust hspace?

PYTHON

제목과 xlabels가 겹치지 않도록 Matplotlib subplots_adjust hspace?

예를 들어, matplotlib에서 3 줄의 subplot을 사용하면 한 줄의 xlabels가 다음 줄의 제목과 겹칠 수 있습니다. 하나는 성가신 pl.subplots_adjust (hspace)로 피들해야합니다.

겹치기를 방지하는 hspace를위한 조리법이 있습니까?

""" matplotlib xlabels overlap titles ? """
import sys
import numpy as np
import pylab as pl

nrow = 3
hspace = .4  # of plot height, titles and xlabels both fall within this ??
exec "\n".join( sys.argv[1:] )  # nrow= ...

y = np.arange(10)
pl.subplots_adjust( hspace=hspace )

for jrow in range( 1, nrow+1 ):
    pl.subplot( nrow, 1, jrow )
    pl.plot( y**jrow )
    pl.title( 5 * ("title %d " % jrow) )
    pl.xlabel( 5 * ("xlabel %d " % jrow) )

pl.show()

내 버전 :

(많은 추가 점에 대해서, TCL / Tk 책의 17 장 "포장 자"의 줄에 따라 matplotlib의 포장 자 / 뚜껑이 어떻게 작동하는지 개략적으로 설명 할 수 있습니까?)

해결법

  1. ==============================

    1.이 작업은 매우 까다 롭지 만 MatPlotLib FAQ에는 여기에 몇 가지 정보가 있습니다. 그것은 다소 번거롭고 개별 요소 (ticklabels)가 차지하는 공간을 알아 내야합니다.

    이 작업은 매우 까다 롭지 만 MatPlotLib FAQ에는 여기에 몇 가지 정보가 있습니다. 그것은 다소 번거롭고 개별 요소 (ticklabels)가 차지하는 공간을 알아 내야합니다.

    최신 정보: 이 페이지에는 tight_layout () 함수가 자동으로 간격을 수정하려고 시도하는 가장 쉬운 방법이라고 나와 있습니다.

    그렇지 않으면 다양한 요소 (예 : 레이블)의 크기를 가져와 축 요소의 간격 / 위치를 수정할 수있는 방법을 보여줍니다. 다음은 위의 FAQ 페이지의 예제로 매우 넓은 y 축 레이블의 너비를 결정하고 이에 따라 축 너비를 조정합니다.

    import matplotlib.pyplot as plt
    import matplotlib.transforms as mtransforms
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.plot(range(10))
    ax.set_yticks((2,5,7))
    labels = ax.set_yticklabels(('really, really, really', 'long', 'labels'))
    
    def on_draw(event):
       bboxes = []
       for label in labels:
           bbox = label.get_window_extent()
           # the figure transform goes from relative coords->pixels and we
           # want the inverse of that
           bboxi = bbox.inverse_transformed(fig.transFigure)
           bboxes.append(bboxi)
    
       # this is the bbox that bounds all the bboxes, again in relative
       # figure coords
       bbox = mtransforms.Bbox.union(bboxes)
       if fig.subplotpars.left < bbox.width:
           # we need to move it over
           fig.subplots_adjust(left=1.1*bbox.width) # pad a little
           fig.canvas.draw()
       return False
    
    fig.canvas.mpl_connect('draw_event', on_draw)
    
    plt.show()
    
  2. ==============================

    2.plt.subplots_adjust를 사용하여 하위 플롯 간의 간격을 변경할 수 있습니다. Link

    plt.subplots_adjust를 사용하여 하위 플롯 간의 간격을 변경할 수 있습니다. Link

    subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
    
    left  = 0.125  # the left side of the subplots of the figure
    right = 0.9    # the right side of the subplots of the figure
    bottom = 0.1   # the bottom of the subplots of the figure
    top = 0.9      # the top of the subplots of the figure
    wspace = 0.2   # the amount of width reserved for blank space between subplots
    hspace = 0.2   # the amount of height reserved for white space between subplots
    
  3. ==============================

    3.Jose에 의해 게시 된 링크가 업데이트되었고 pylab에는 자동으로이를 수행하는 tight_layout () 함수가 있습니다 (matplotlib 버전 1.1.0).

    Jose에 의해 게시 된 링크가 업데이트되었고 pylab에는 자동으로이를 수행하는 tight_layout () 함수가 있습니다 (matplotlib 버전 1.1.0).

    http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.tight_layout

    http://matplotlib.org/users/tight_layout_guide.html#plotting-guide-tight-layout

  4. from https://stackoverflow.com/questions/2418125/matplotlib-subplots-adjust-hspace-so-titles-and-xlabels-dont-overlap by cc-by-sa and MIT license