стрелка в сюжете matplotlib.pyplot - PullRequest
0 голосов
/ 29 ноября 2018

Я не могу заставить стрелку отображаться так, как я хочу.Вот пример того, что я пытаюсь сделать:

import matplotlib.pyplot as plt
import numpy as np

b = np.arange(5)*-1E-4
a = np.arange(5)

fig, ax = plt.subplots()
ax.plot(a,b, linewidth=3, color="k") 
plt.arrow(1,-0.00010,0,-0.00005, shape='full', lw=3, length_includes_head=True, head_width=.01)
plt.show()

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

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Поскольку вы находитесь в таких малых масштабах, некоторые аргументы, которые вы явно не передали plt.arrow, будут использовать свои значения по умолчанию, которые в вашем случае не дадут хорошего результата.

Глядя на документация , если значение ширины не передается, то значение по умолчанию равно 0,001, тогда ширина головки будет 0,003, а длина головки будет 0,0015.Поскольку ширина головы слишком мала с использованием значений по умолчанию, а длина головы слишком велика, вы получите результат, увиденный в вопросе

Следовательно, вам нужно передать аргументы head_width и head_length:

plt.arrow(1, -0.00010, 0, -0.00005, length_includes_head=True,
          head_width=0.08, head_length=0.00002)

, что дает:

enter image description here

0 голосов
/ 29 ноября 2018

Вы можете нарисовать стрелку с аннотацией. matplotlib docs

a = np.linspace(-2,2, 100)
plt.plot(a, a**2)
plt.annotate("here", xy=(0, 0), xytext=(0, 2), arrowprops=dict(arrowstyle="->"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...