2017-04-20 6 views
1

선생님은 그래프에서 축 번호를 0, 0.25, 0.5이 아닌 0.00,0.25,0.50,...으로 지정해야한다고했습니다. 0.00,0.25,0.50 (plt.yticks(np.arange(-1.5,1.5,.25)))과 같이 레이블을 지정하는 방법을 알고 있지만 다른 정밀도로 눈금을 그릴 방법을 모르겠습니다.matplotlib 축의 다른 정밀도

나는 소용없이

plt.yticks(np.arange(-2,2,1)) 
plt.yticks(np.arange(-2.25,2.25,1)) 
plt.yticks(np.arange(-1.5,2.5,1)) 

처럼하려고 노력했습니다.

+0

선생님은 실제로 잘못된 것입니다. 축의 정밀도는 변경되지 않으므로 레이블링도 변경해야합니다. 또한, 같은 수의 자릿수를 사용하는 것이 더 미적입니다. – ImportanceOfBeingErnest

+0

예, 저는 그가 틀렸다는 것을 알고 있습니다. 그러나 그는 올바른 사람입니다. 그래서 나는 그의 규칙에 꼭 맞아야합니다. 심지어 정확하지 않습니다. – MatMorPau22

답변

2

이것은 이미 대답되었습니다 (예 : Matplotlib: Specify format of floats for tick lables). 그러나 실제로는 참조 된 질문에서 사용 된 것보다 다른 형식을 원합니다.

그래서이 코드는 당신이 FormatStrFormatter에 전달하는 문자열에 바란 정밀도를 정의 할 수 있습니다

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.ticker import FormatStrFormatter 

fig, ax = plt.subplots() 

ax.yaxis.set_major_formatter(FormatStrFormatter('%g')) 
ax.yaxis.set_ticks(np.arange(-2, 2, 0.25)) 

x = np.arange(-1, 1, 0.1) 
plt.plot(x, x**2) 
plt.show() 

축 당신에게 Y에 당신의 바란 정밀도를 제공합니다. 위의 경우에는 일반적인 형식을 나타내는 "% g"입니다. 이 형식은 무시할 수없는 후미 0을 제거합니다. "% .1f"와 같은 다른 형식도 사용할 수 있습니다. "% .1f"는 소수 자릿수 하나의 정밀도 일 수 있지만 "% .3f"는 소수 자릿수 세 자릿수입니다. 이러한 형식은 here에 자세하게 설명되어 있습니다.

3

틱의 위치를 ​​0.25의 배수로 설정하려면 matplotlib.ticker.MultipleLocator(0.25)을 사용할 수 있습니다. 그런 다음 숫자의 오른쪽에서 0을 제거하는 기능을 사용하여 FuncFormatter을 사용하여 티클 라벨을 포맷 할 수 있습니다.

import matplotlib.pyplot as plt 
import matplotlib.ticker 

plt.plot([-1.5,0,1.5],[1,3,2]) 
ax=plt.gca() 

f = lambda x,pos: str(x).rstrip('0').rstrip('.') 
ax.xaxis.set_major_locator(matplotlib.ticker.MultipleLocator(0.25)) 
ax.xaxis.set_major_formatter(matplotlib.ticker.FuncFormatter(f)) 
plt.show() 

enter image description here

관련 문제