Как увеличить размер головы указанного типа стрелки c в matplotlib? - PullRequest
1 голос
/ 23 марта 2020

Я пытаюсь изменить некоторые свойства стрелок в matplotlib. Вот пример того, что я пытаюсь сделать с моим набором данных. Я знаю, как редактировать некоторые свойства, используя arrowprops при работе со "обычной" стрелкой (той, что в test1 ), но мне нужно указать интервал между двумя точками на линии , Для этого мне нужно увеличить размер «головы» стрелки в test2 . По сути, мне нужна головка этой стрелки, чтобы покрыть / указать интервал между точками (5.0, 3.5) и (4.0, 3.0).

Ниже приведен мой код и его вывод.

import matplotlib.pyplot as plt

fig,ax = plt.subplots(figsize = (5,5))

plt.plot([1, 1.5, 2, 2.5, 3, 3.5, 4], marker='o')    

ax.annotate('test1', (2, 2.1), xytext=(-15,15), color='r', size=13, 
            textcoords='offset points', arrowprops=dict(width=0.3,
                                                        headwidth=5,
                                                        headlength=4,
                                                        shrink=.18),
            bbox=dict(pad=0.01, facecolor='none', edgecolor='none'))

ax.annotate('test2', (5, 3.3), xytext=(20,-40), color='r', size=13, 
            textcoords='offset points', arrowprops=dict(arrowstyle='-['),
            bbox=dict(pad=0.01, facecolor='none', edgecolor='none'));

example

1 Ответ

1 голос
/ 24 марта 2020

Вы правы, в документации указано, что некоторые ключи запрещены, если в диктовке arrowsprops содержится arrowstyle. Следовательно, чтобы увеличить размер головки стрелки, вы должны использовать клавишу mutation_scale.

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize = (5, 5))

plt.plot([1, 1.5, 2, 2.5, 3, 3.5, 4], marker='o')    

ax.annotate('test1', (2, 2.1), xytext=(-15, 15), color='r', size=13, 
            textcoords='offset points', 
            arrowprops=dict(width=0.3, headwidth=5, headlength=4, 
                            shrink=.18),
            bbox=dict(pad=0.01, facecolor='none', edgecolor='none'))

ax.annotate('test2', (4.8, 3.1), xytext=(10,-60), color='r', size=13, 
            ha='center', va='center', textcoords='offset points', 
            arrowprops=dict(arrowstyle='-[', mutation_scale=28, 
                            connectionstyle='arc3,rad=0.38'),
            bbox=dict(pad=0.01, facecolor='none', edgecolor='none'));

Я также добавил параметры connectionstyle, horizontalalignment и verticalalignment, чтобы упростить выравнивание наконечник стрелы с линией. Но имейте в виду, что они необязательны.

Окончательный результат :

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...