Разметка текстовых записей с соответствующей легендой в matplotlib (и с возможностями форматирования) - PullRequest
0 голосов
/ 15 января 2019

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

Я определил три возможных способа сделать это, ни один из которых не дает мне контроль, который я хотел бы иметь:

  • plot вместе с математическим текстом в качестве маркера: отлично для легенды, но как мне отформатировать сам текст (например, избегать полужирного, курсива, выбрать семейство шрифтов и т. Д.)?;
  • annotate: хорошо иметь полный контроль над текстом, но как я могу сослаться на легенду (при этом маркер отображается точно так же, как на графике)?;
  • text: то же, что и для annotate.

    import matplotlib.pyplot as plt
    
    myd = dict((k, v) for (k, v) in zip(('FOO', 'BLA', 'OOP'),
                                        ('Foofighters!', 'BlackPanther', 'Oops I did it again')))
    mycolors = ('r', 'b', 'g')
    
    fig, (ax0, ax1, ax2) = plt.subplots(1, 3, figsize=(10,4), sharex=True, sharey=True)
    
    for i, (k,v) in enumerate(myd.items()):
    
        ax0.plot(i, i, marker='$%s$' % k, ms=20, lw=0, label = v,
                 color=mycolors[i])
        ax0.legend(loc=2)
    
        ax1.annotate(k, xy=(i, i), label=v, ha='center', va='center',
                     color=mycolors[i], fontweight='extra bold')
        ax1.legend(loc=2)
    
        ax2.text(i, i, k, label=v, ha='center', va='center',
                 color=mycolors[i], family='fantasy', rotation=15)
        ax2.legend(loc=2)
    
    fig.tight_layout()
    plt.show()
    

enter image description here

...