#python #matplotlib #annotations #size #marker
#python #matplotlib #аннотации #размер #маркер
Вопрос:
В моем коде есть два оператора ax.annotate. Текст в первой строке я хочу быть большим. Текст второй строки должен уменьшаться.
for i,j,k in zip(x_power,y_power,net_name_power):
ax.annotate(str(k), xy=(i, j), color='white', fontsize=1, weight='light', horizontalalignment='center', verticalalignment='bottom')
ax.annotate('{} , {}'.format(str(round(i,3)),str(round(j,3))), xy=(i, j), color='blue', fontsize=0.1, weight='light', horizontalalignment='center', verticalalignment='top')
размер шрифта ax.annotate не масштабируется ниже fontsize= 1.
На изображении белый текст равен fontsize = 1, тогда как синий текст равен fontsize = 0.1. Но, как можно видеть, оба текста имеют одинаковый размер. Я сбрасываю график в формате PDF, используя plt.savefig (‘output.pdf’) .
Я хочу, чтобы синий текст уменьшался, чтобы он аккуратно помещался в красный круговой маркер. Может кто-нибудь предложить решение?
Спасибо!
Ответ №1:
Я считаю, что минимальный размер точки шрифта равен 1 — см. Исходный код здесь:
if size < 1.0:
_log.info('Fontsize %1.2f < 1.0 pt not allowed by FreeType. '
'Setting fontsize = 1 pt', size)
size = 1.0
Вместо этого вы можете попробовать использовать строковые дескрипторы:
Например: fontsize='xx-small'
font_scalings = {
'xx-small': 0.579,
'x-small': 0.694,
'small': 0.833,
'medium': 1.0,
'large': 1.200,
'x-large': 1.440,
'xx-large': 1.728,
'larger': 1.2,
'smaller': 0.833,
None: 1.0,
Комментарии:
1. Спасибо @mullinscr . Я попытался использовать fontsize=’xx-small’ , но, к сожалению, синий текст стал даже больше минимального размера (fontsize = 1). Вот так: i.imgur.com/hZiYou0.png
2. В этом случае лучшим вариантом может быть масштабирование всего остального, чтобы оно соответствовало тексту.
3. Я попытался масштабировать все на своем графике. Я строю точечный график xy с двумя переменными x_coords и y_coords .
x_coords = [i*5 for i in x_coords ]
иy_coords = [i*5 for i in y_coords ]
и затем,plt.axis([0, max(x_coords), 0, max(y_coords )])
. Масштабируются только значения тиков, но все на графике остается неизменным. Это правильный способ сделать это?