Размер шрифта аннотации маркера Matplotlib не уменьшается ниже 1pt в PDF

#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 )]) . Масштабируются только значения тиков, но все на графике остается неизменным. Это правильный способ сделать это?