Комплексная настройка параметров шрифта matplotlib - PullRequest
2 голосов
/ 04 марта 2020

Насколько я понимаю, эта документация matplotlib предоставляет 3 способа изменения параметров стиля для черчения (например, axes.grid). Это следующие способы: использование таблиц стилей для одновременной установки множества параметров; задание параметров c через matplotlib.rcParams или matplotlib.rc; или используя файл matplotlibrc для установки значений по умолчанию.

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

Я пытался понять это из связанной документации, но часто терпел неудачу. Специфическим примером c является установка шрифта оси. Обычно я использую такую ​​комбинацию:

axis_font = {'fontname':'Arial', 'size':'32'}
ax.set_ylabel('some axis title',**axis_font)

Но не ясно, какой параметр matplotlib (если есть) я задал. Существует ли параметр для шрифта оси, который может быть включен, например, в файл стиля?

Другие попытки в моем коде включают в себя сбивающие с толку блоки, такие как:

legend_font = {'fontname':'Arial', 'size':'22'}
#fonts global settings
matplotlib.rc('font',family=legend_font['fontname'])

По названиям это кажется как будто это изменило бы шрифт легенды, но на самом деле это явно настройка параметра для общего шрифта. И размер не используется. Существуют ли matplotlib параметры для , в частности шрифта и размера легенды?

Я попробовал следующее:

  • Проверка примера matplotlibrc внизу связанной страницы (без признаков осей или шрифтов легенды)
  • Печать matplotlib.rcParams (без знака оси или шрифтов легенды)
  • Проверка оси api (не может совпадать с примерами файлов стилей, например classi c файл предопределенного стиля имеет набор facecolor, который упоминается на этой странице, но также имеет набор edgecolor, который не упомянут на странице)

1 Ответ

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

Свойство rcParams, которое изменяет шрифт: font.family, допускает 'serif', 'sans-serif', 'cursive', 'fantasy' и 'monospace', как указано в связанном примере matplotlibrc файл . Если text.usetex равно False, оно также принимает любое конкретное имя шрифта или список имен шрифтов - что будет пробоваться в порядке, указанном до тех пор, пока не будет выполнено одно действие.

Этот метод применяет указанное имя шрифта к вся фигура (и ко всем фигурам, когда сделано глобально). Если вы хотите изменить семейство шрифтов для отдельного экземпляра Text (т.е. метки оси), вы можете использовать matplotlib.text.Text.set_family() (который является псевдонимом для matplotlib.text.Text.set_fontfamily())

import matplotlib.pyplot as plt

ylabel = plt.ylabel("Y Label")
ylabel.set_family("DejaVu Serif")
plt.xlabel("X Label")

plt.show()

enter image description here

И чтобы установить семейство шрифтов только для экземпляра легенды, вы можете использовать plt.setp, например,

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

ylabel = plt.ylabel("Y Label")
plt.xlabel("X Label")
ylabel.set_family("DejaVu Serif")

legend = plt.legend(handles = [mpatches.Patch(color='grey', label="Label")])
plt.setp(legend.texts, family="EB Garamond")

plt.show()

enter image description here


Обратите внимание, что этот метод не будет работать, если text.usetex равен True.

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