2017-05-09 1 views
0

파이썬으로 데이터를 플롯하고 FuncFormatter으로 틱을 변경하려고했습니다. 이제 세그먼트를 둥근 숫자로 변경하고 싶습니다. 나는 또한 동일한 형성에서 작은 틱을 원한다. 나의 경우에는 1/x 세그멘테이션이 될 것이다. 스케일링을 확산시키고 싶습니다. 사진은 당신이 내 문제를 상상하는 데 도움이 될 것입니다. 나는 이런 식으로 뭔가를 얻을 수 있도록파이썬 1/x 플롯 스케일 포맷, 틱 위치

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.ticker as tick 
x = np.array([805.92055,978.82006,564.88627,813.70311,605.73361,263.27184,169.40317]) 
y = np.array([10,9,8,7,6,3,2]) 
fig, ax = plt.subplots(figsize =(3.6,2.5)) 
plt.plot(1/x,y,linestyle ='None',marker='1') 
a=0.001 
b=0.005 
plt.xlim(a,b) 
def my_formatter_fun(x, p): 
    return "%.0f" % (1/x)   
ax.get_xaxis().set_major_formatter(tick.FuncFormatter(my_formatter_fun)) 

plot with changed xtick

은 어떻게 segmentaion을 변경할 수 있습니까? my_formatter_fun에 내 소원을 추가하는 방법이있을 수 있다고 생각했지만 어떻게해야할지 모르겠다. 1/x 배포판에도 부검 진드기를 어떻게 추가 할 수 있습니까? 나는 plt.minorticks_on()을 시도했지만 이것이 선형 위치에 있기 때문에 작동하지 않습니다.

desired plot

답변

0

눈금의 위치는 matplotlib.ticker.Locator으로 제어 될 수있다.

class ReciprocalLocator(tick.Locator): 
    def __init__(self, numticks = 5): 
     self.numticks = numticks 
    def __call__(self): 
     vmin, vmax = self.axis.get_view_interval() 
     ticklocs = np.reciprocal(np.linspace(1/vmax, 1/vmin, self.numticks)) 
     return self.raise_if_exceeds(ticklocs) 

당신은 당신의 음모에 사용할 수 있습니다 이것은 좋은 번호로 위치를 이동 더 많은 조정이 필요

ax.get_xaxis().set_major_locator(ReciprocalLocator(numticks=4)) 
ax.get_xaxis().set_minor_locator(ReciprocalLocator(numticks=20)) 

호출하여 : 1/x 진드기를 들어, 사용자 정의 로케이터를 정의해야합니다. 영감을 얻으려면 소스 코드 matplotlib.ticker.MaxNLocator을 살펴보십시오.