Как бы я пошел, если бы хотел нарисовать скобки над некоторыми частями моего заговора следующим образом:
В настоящий момент я добавляю их с powerpoint, но я хотел бы сделать это целиком в python.
Спасибо за помощь
Как бы я пошел, если бы хотел нарисовать скобки над некоторыми частями моего заговора следующим образом:
В настоящий момент я добавляю их с powerpoint, но я хотел бы сделать это целиком в python.
Спасибо за помощь
Один из способов получить то, что вы хотите (или что-то очень близкое ему), - использовать функцию matplotlib annotate
, которая позволяет вам довольно широко настраивать функцию стрелок. Вот пример с некоторыми составленными данными графика, чтобы показать, как использовать его в соответствии с вашими требованиями к ярлыкам:
import matplotlib.pyplot as plt
import numpy as np
# Make some fake data and a sample plot
x = np.arange(1,100)
y = x**2 * 1.0e6
ax = plt.axes()
ax.plot(x,y)
# Adjust the fontsizes on tick labels for this plot
fs = 14.0
[t.set_fontsize(fs) for t in ax.xaxis.get_majorticklabels()]
[t.set_fontsize(fs) for t in ax.yaxis.get_majorticklabels()]
ax.yaxis.get_offset_text().set_fontsize(fs)
# Here is the label and arrow code of interest
ax.annotate('SDL', xy=(0.5, 0.90), xytext=(0.5, 1.00), xycoords='axes fraction',
fontsize=fs*1.5, ha='center', va='bottom',
bbox=dict(boxstyle='square', fc='white'),
arrowprops=dict(arrowstyle='-[, widthB=7.0, lengthB=1.5', lw=2.0))
Функция annotate
содержит требуемую текстовую метку, а также аргументы для позиционирования для стрелки (xy
) и самого текста (xycoords
) и некоторых общих команд позиционирования и шрифтов.
Вероятно, наиболее интересны аргументы bbox
и arrowprops
. Аргумент bbox
рисует квадрат вокруг метки с белым фоном. arrowprops
больше задействованы - клавиша arrowstyle
устанавливает головку стрелки (в данном случае - скобу), а также ширину и длину головы. Обратите внимание, что это все одна строка под arrowstyle
. Наконец, ширина линии стрелки слегка увеличивается.
Возможно, вам придется настроить xy
, xytext
, widthB
, lengthB
и стрелку lw
, чтобы получить все, что вам нужно.
Одна вещь, которая не сразу понятна (или, по крайней мере, не была для меня, когда я понял это), заключалась в том, что когда annotate
содержит аргумент arrowstyle
, matplotlib использует FancyArrowPatch
свойства, но когда arrowstyle
отсутствует, он использует свойства YAArrow
. Очевидно, что в документации для annotate
отмечено более подробно (а также это различие).