2016-06-14 1 views
2

Если я запускаю этот скрипт:отношение Matplotlib Наконечники и аспект

import matplotlib.pyplot as plt 
import pylab as plab 

plt.figure() 
plt.plot([0,2], [2,0], color='c', lw=0.5) 
plt.plot([1,2], [2,1], color='k', lw=0.5) 
plt.arrow(1,1,0.5,0.5, head_width=0.1, width=0.01, head_length=0.1, color='r') 
plt.arrow(1.25,0.75,0.5,0.5, head_width=0.1, width=0.01, head_length=0.1, color='g') 

plab.axes().set_aspect(0.5) 

plt.show() 

я получаю это: enter image description here Обратите внимание, что задние части наконечниками находятся на одном уровне с этой черной линией, которая простирается от (1,2) до (2,1). Это имеет смысл, но я хочу, чтобы спины стрелок были ВИЗУАЛЬНО перпендикулярно хвостам БЕЗ изменения формата. Как мне это сделать?

+0

что вы имеете в виду, визуально перпендикулярно к хвостам? – hashcode55

+0

Я имею в виду именно то, что я сказал. Если я должен был взять транспортир, поместить его на экран и измерить угол между базовой линией головы и хвостом, я хочу, чтобы этот угол был на 90 градусов. – Phys251

ответ

2

Я был недоволен этой проблемой (почти) когда-либо, и в основном в конечном итоге использовал annotate() для рисования стрелок. Например (не хватает много донастроить, чтобы в конечном итоге с одинаковым результатом, как ваш сюжет ...):

import matplotlib.pyplot as plt 
import pylab as plab 

plt.figure() 
ax=plt.subplot(211) 
plt.plot([0,2], [2,0], color='c', lw=0.5) 
plt.plot([1,2], [2,1], color='k', lw=0.5) 
plt.arrow(1,1,0.5,0.5, head_width=0.1, width=0.01, head_length=0.1, color='r') 
ax.set_aspect(0.5) 

ax=plt.subplot(212) 
plt.plot([0,2], [2,0], color='c', lw=0.5) 
plt.plot([1,2], [2,1], color='k', lw=0.5) 
ax.annotate("", 
      xy=(1.5, 1.5), xycoords='data', 
      xytext=(1, 1), textcoords='data', 
      arrowprops=dict(arrowstyle="-|>", 
          connectionstyle="arc3"), 
      ) 
ax.set_aspect(0.5) 

plt.show() 

enter image description here

Смежные вопросы