2014-01-15 3 views
3

다른 데이터 세트에 대한 로그 - 로그 플롯을 만들고 있으며 가장 적합한 라인 방정식을 포함해야합니다. 저는 플롯에서 방정식을 어디에 배치해야하는지 알고 있지만 데이터 세트의 값이 매우 다르므로 주석의 상대 좌표를 사용하고 싶습니다. (그렇지 않으면, 주석은 모든 데이터 세트에 대해 움직일 것입니다.) matplotlib의 annotate() 함수를 알고 있고 textcoords = 'axes fraction'을 사용하여 상대 좌표를 사용할 수 있다는 것을 알고 있습니다. 내 데이터를 정규 스케일로 플롯하면 작동합니다. 그러나 적어도 저울 중 하나를 변경하여 기록하고 주석이 사라집니다. 오류 메시지가 표시되지 않습니다.Matplotlib 주석은 로그 스케일에서 작동하지 않습니까?

여기 내 코드입니다 : (이 있어야 할 곳에) 내가 ax.set_xcale('log')ax.set_ycale('log')을 주석 경우

plt.clf() 
samplevalues = [100,1000,5000,10^4] 
ax = plt.subplot(111) 
ax.plot(samplevalues,samplevalues,'o',color='black') 
ax.annotate('hi',(0.5,0.5), textcoords='axes fraction') 
ax.set_xscale('log') 
ax.set_yscale('log') 
plt.show() 

, 주석 바로 플롯의 중간에 나타납니다. 그렇지 않으면 나타나지 않습니다.

미리 도움 주셔서 감사합니다.

+0

: 내가 한

ax.plot(samplevalues,samplevalues,'o',color='black') ax.set_xscale('log') ax.set_yscale('log') 

: 그 대신에,이다 그러나 나는 누군가 그것을 아직 추적하지 못했다고 생각한다. 이상한 부동 소수점 문제입니다. – tacaswell

+0

@tcaswell 이걸 matplotlib 개발자에게 어떻게보고 할 수 있는지 알고 싶습니까? 감사! – irene

+0

나는 그들 중의 한 사람이므로 거기가는 길에있다.) 그 문제에 대해 의견을 남길 수 있니? 코드 외에도 사용중인 mpl ('matplotlib .__ version__ ')의 버전을 포함시킬 수 있습니까? – tacaswell

답변

1

은 정말 코멘트에 @tcaswell에 의해 지적 버그가있을 수 있지만, 해결 방법은 축 좌표 텍스트()를 사용하는 것입니다 :

plt.clf() 
samplevalues = [100,1000,5000,10^4] 
ax = plt.subplot(111) 
ax.loglog(samplevalues,samplevalues,'o',color='black') 
ax.text(0.5, 0.5,'hi',transform=ax.transAxes) 
plt.show() 

또 다른 방법은 (figtext 사용하는 것입니다)하지만입니다 이미 여러 플롯 (패널)이있는 경우 사용하는 것이 더 귀찮습니다.

위의 코드에서 로그 로그 스케일을 사용하여 데이터를 직접 플로팅했습니다. 나는 이것이 https://github.com/matplotlib/matplotlib/issues/1311 내가 얼마 전에보고 어떤 관련이 의심

ax.loglog(samplevalues,samplevalues,'o',color='black') 
+0

매력처럼 작동했습니다. 고맙습니다. – irene

관련 문제