2012-11-06 2 views
2

분산 형 플롯을 생성 중이며 플롯에서 눈금 선과 텍스트 사이의 겹침을 피할 수 있는지 궁금합니다.python - matplotlib - 그리드 선, 테두리 및 기타 텍스트로 플롯 텍스트 충돌을 피하십시오.

Example Plot

예를 들어, 첫 번째 점은 읽기가 어려워 질 격자 선에 해당 텍스트가 있습니다.

내 코드는 다음과 같습니다 :

for i, j in zip(path_loss_list,throughput_values): 
    plt.annotate("%s" %str(j), xy=(i,j), xytext=(-5, 5), ha='right', textcoords='offset points') 

답변

2

직접 플롯 포인트 위의 모든 텍스트를 넣어 경우, 당신은 문제가 안된다고 생각합니다. 예를 들어보십시오 :

for i, j in zip(path_loss_list,throughput_values): 
     plt.annotate("%s" %str(j), xy=(i,j), xytext=(0, 5), ha='right', textcoords='offset points') 

그러나,이 점과 당신이 xytext = (0, 8).이 당신의 모든 포인트에 대한 일관성있는 해결책이되지 않을 수도 있습니다 변경할 수있는 경우 오른쪽에있는 모든 방법을, 일부 중복이 발생할 수 있습니다. 최상위 지점의 텍스트를 이동합니다

for i, j in zip(path_loss_list,throughput_values): 
     if not j> 59: 
      plt.annotate("%s" %str(j), xy=(i,j), xytext=(-5, 5), ha='right', textcoords='offset points') 
     else: 
      plt.annotate("%s" %str(j), xy=(i,j), xytext=(0, 5), ha='right', textcoords='offset points') 

이 : 따라서, 당신은 같은 포인트 간 기반으로 텍스트 높이를 지정해야 할 수도 있습니다. y = 54.615에 대해 추정 할 수 있습니다.

+0

첫 번째 블록은 나를 위해 작동 확인, rcParams에 대한 자세한 내용을 참조하십시오. 나는 내가 생성하는 포인트의 수에 따라 계속 놀아야한다. – Parth

2

내가 올바르게 얻은 경우 눈금과 점 아래에 눈금 선이 있어야합니다. 이 경우 ax.set_axisbelow(True)을 사용하십시오. 여기서 ax는 눈금 선을 포함하는 축입니다. 당신은 당신이 그것을 추적마다 변경하지 않아도

http://matplotlib.org/api/axes_api.html?highlight=set_axisbelow#matplotlib.axes.Axes.set_axisbelow

는 또한, 스크립트의 매개 변수로 설정할 수 있습니다. 또한, 매우 간단합니다, 바로 matplotlib.rc('axes', axisbelow=True)

해, params의 목록 http://matplotlib.org/api/matplotlib_configuration_api.html#matplotlib.rchttp://matplotlib.org/users/customizing.html?highlight=rcparams