2017-10-24 2 views
0

matplotlib.ticker 메서드를 사용하여 올바른 x-ticks 값을 얻는 데 문제가 있습니다. 내 문제를 설명하기위한 간단한 작업 예제가 있습니다.잘못된 값이 나타납니다 ... python matplotlib.ticker (ax.xaxis.set_major_locator)

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib 

## Sample code 
np.arange(0, 15, 5) 
plt.figure(figsize = [6,4]) 

x=np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]) 
y=np.array([15,16,17,18,19,20,40,50,60,70,80,90,100,110,120]) 
ax = sns.pointplot(x,y, color='k', markers=["."], scale = 2) 
ax.xaxis.set_major_locator(matplotlib.ticker.FixedLocator([1,5,8])) 

결과 X-진드기는 우측 위치 (1,5,8)하지만 1,5,8 대신 1 (의 (X 값에 대응하는)되어 해당 위치에 대한 원하는 값에 위치하고 2,3)

나는 모든 로케이터가 https://matplotlib.org/examples/ticks_and_spines/tick-locators.html 설명했지만, 한 그것은 전체 방송 1,2,3 X-틱 값 ... :(

wrongtickvalue

내 실제 문제 (데 문제가 동일한 문제 : x-tick은 t 대신 64, 273.5, 1152.5와 같아야합니다. 그는 처음 세 숫자)

... 
print(intervals} 
>> [64, 74, 86.5, 10.1, 116.0, 132.0, 152.0, 175.5, 204.0, 236.0, 273.5, 319.0, 371.0, 434.0, 509.0, 595.5, 701.0, 861.0, 1152.5] 

ax.xaxis.set_major_locator(matplotlib.ticker.LinearLocator(3) 
plt.show() 

wrong_tick_value2

답변

1

성공적으로 로케이터를 설정했습니다. 진드기의 위치는 실제로 1,5,8 위치에 있습니다.

누락 된 것은 포맷터입니다. 그 위치에 어떤 가치를 보여주고 싶습니까?
당신은

ax.xaxis.set_major_formatter(matplotlib.ticker.FixedFormatter([1,5,8])) 

당신은 동일하게 자동으로 위치에 따라 ticklabels를 선택할 것 ScalarFormatter을 사용할 수, 표시하는 라벨을 지정하여 FixedFormatter 사용할 수 있습니다.

ax.xaxis.set_major_formatter(matplotlib.ticker.ScalarFormatter()) 

전체 코드 : 여기 최선의 선택을하지 않을 수 시본 pointplot를 사용

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib 
import seaborn as sns 

## Sample code 
np.arange(0, 15, 5) 
plt.figure(figsize = [6,4]) 

x=np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]) 
y=np.array([15,16,17,18,19,20,40,50,60,70,80,90,100,110,120]) 
ax = sns.pointplot(x,y, color='k', markers=["."], scale = 2) 
ax.xaxis.set_major_locator(matplotlib.ticker.FixedLocator([1,5,8])) 
ax.xaxis.set_major_formatter(matplotlib.ticker.ScalarFormatter()) 
# or use 
#ax.xaxis.set_major_formatter(matplotlib.ticker.FixedFormatter([1,5,8])) 

plt.show() 

enter image description here


. 일반적인 matplotlib 플롯이 훨씬 더 의미가 있습니다. 이 경우 포매터가 이미 자동으로 ScalarFormatter로 설정되어 있기 때문에 로케이터 만 설정하는 것만으로도 충분합니다.

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib 
import seaborn as sns 

## Sample code 
np.arange(0, 15, 5) 
plt.figure(figsize = [6,4]) 

x=np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]) 
y=np.array([15,16,17,18,19,20,40,50,60,70,80,90,100,110,120]) 
plt.plot(x,y, marker="o") 
plt.gca().xaxis.set_major_locator(matplotlib.ticker.FixedLocator([1,5,8])) 

plt.show() 
+0

고마워요! 나는 포매터가 존재한다는 것을 몰랐다. – SUNDONG

+0

왜 정확히 여기에 포인트 플롯을 사용하고 있습니까? 나는 보통'plt.plot()'을 사용하는 것이 더 합리적이라고 생각한다. 이 경우 포매터가 이미 자동으로 ScalarFormatter로 설정되어 있기 때문에 로케이터 만 설정하는 것만으로도 충분합니다. – ImportanceOfBeingErnest

+0

나는 '해골'도서관에서 해본 음모를 사용하여 약간의 유익 (어떤 문체적인 것)을 얻었습니다. 그 그림을 사용하기로 결정하면'Locator'와'formatter' 문제가 발생합니다 ...! 어쨌든 bin 값 목록이 있고'formatter'를 사용하여 올바른 값을 넣습니다. 감사! – SUNDONG

관련 문제