2013-06-18 5 views
10

극좌표 플롯 눈금 레이블 (theta)의 패딩/오프셋을 늘릴 수있는 방법이 있습니까?matplotlib : 극좌표에 패딩/오프셋 추가 틱 레이블

import matplotlib 
import numpy as np 
from matplotlib.pyplot import figure, show, grid 

# make a square figure 
fig = figure(figsize=(2, 2)) 
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True, axisbg='#d5de9c') 
ax.set_yticklabels([]) 

r = np.arange(0, 3.0, 0.01) 
theta = 2*np.pi*r 
ax.plot(theta, r, color='#ee8d18', lw=3) 
ax.set_rmax(2.0) 
show() 

나는 그들이 중복되지 않도록 더 멀리 북극 플롯에서 세타 눈금 레이블이 싶습니다. 모든

enter image description here

답변

11

첫째; figsize을 (2,2)로 지정하고 ax이 너비와 높이 모두의 80 %를 차지하는 것으로 보는 경우, 은 약간 희미한 문자가 들어간 채입니다. 이것은 그림의 egdes에서 ticklabel을 "차단"시킬 수 있습니다. 이것은 쉽게 더 큰 figsize

  • ax는 (2,2)에 적은 공간 크기의 그림을 차지합니다 지정하거나

    • 에 의해 "고정"할 수
    • ticklabels에 대한
    • 사용 작은 글꼴 크기

    또는 이들의 조합. 또 다른, 제 생각에는이 "문제"에 대한 해결책은 Axes의 경계를 지정하는 것보다 하위 플롯을 사용하는 것입니다. 이 같은

    ax = fig.add_subplot(111, polar=True, axisbg='#d5de9c') 
    

    것이 가능 자동 모든 요소를 ​​포함하는 근사 도면 레이아웃을 구성 tight_layout() 방법을 사용한다.

    손에 진짜 문제에 넘어서십시오; 패딩 PolarAxes에서 세타 틱의 반경 배치를 설정할 수 있습니다. 이는 PolarAxesset_thetagrids() 메서드의 frac 매개 변수에 대한 인자로 티클 라벨을 배치 할 극축 반지름의 비율을 지정하여 수행됩니다. 인수는 축 레이블을 배치 할 축 반경의 일부 여야합니다. 나는. frac < 1의 경우 축 레이블은 frac> 1 인 경우 축 외부에 배치됩니다.

    import numpy as np 
    from matplotlib.pyplot import figure, show, grid, tight_layout 
    # make a square figure 
    fig = figure(figsize=(2, 2)) 
    ax = fig.add_subplot(111, polar=True, axisbg='#d5de9c') 
    ax.set_yticklabels([]) 
    
    r = np.arange(0, 3.0, 0.01) 
    theta = 2*np.pi*r 
    ax.plot(theta, r, color='#ee8d18', lw=3) 
    ax.set_rmax(2.0) 
    
    # tick locations 
    thetaticks = np.arange(0,360,45) 
    
    # set ticklabels location at 1.3 times the axes' radius 
    ax.set_thetagrids(thetaticks, frac=1.3) 
    
    tight_layout() 
    
    show() 
    

    PolarAxes with frac=1.3

    당신 자신의 필요에 가장 적합한 값을 찾을 frac에 대해 다른 값을 시도해야합니다 :

    코드는 다음과 같은 것이 될 수있다.

    위의 매개 변수 frac에 값을 지정하지 않은 경우 (예 : frac의 기본값이 None 인 경우) 코드에서 다음과 같은 그림을 출력합니다. 눈금이 위의 예에서와 같이 "많은 공간을 차지하지"않으므로 플롯의 반경이 더 커지는 것에 유의하십시오.

    PolarAxes with frac=None

  • +0

    와우, 놀라운 설명! 정말 감사합니다! – dimka

    +0

    기본 'frac'이 무엇인지 알고 있습니까? – Annan

    +0

    @Annan [this] (https://github.com/matplotlib/matplotlib/blob/ff31d67a8103620221a3eeadeb985e8268a7d934/doc/users/whats_new.rst#enhancements-to-polar-plot)에서 'frac'이 사용되지 않습니다. "[...] 결과적으로 .PolarAxes에 대한 frac 인수.set_thetagrids는 더 이상 적용되지 않습니다. 틱 패딩은 .Axes.tick_params 또는 .Axis.set_tick_params에 대한'pad' 인수로 수정할 수 있습니다. " – hooy