Изменить шрифты меток радиальной оси полярного графика matplotlib

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

Я попытался использовать font_manager для определения шрифта:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties

#define font
baseFont = FontProperties(family='Helvetica',fname=[path to the .ttf file])

a = np.random.uniform(-np.pi/2,np.pi/2,100)
d = np.random.uniform(0,20,100)
c = np.random.uniform(0,1,100)

fig, sub = plt.subplots(1,2,subplot_kw = {'polar':[True,True]})

#configure the ticks
aTicks = np.linspace(-np.pi/2,np.pi/2,7,endpoint=True)
aLabels = np.linspace(-90,90,7,endpoint=True)
dTicks1 = np.arange(0,20.1,5)
dTicks2 = np.arange(0,5.1,1)

#plot the first graph
sub[0].scatter(a,d,c=c,cmap='hsv')

sub[0].set_thetamin(-90)
sub[0].set_thetamax(90)
sub[0].set_ylim(0,20.1)
sub[0].set_xticks(aTicks,labels=aLabels,font=baseFont,fontsize=12)
sub[0].set_yticks(dTicks1,labels=dTicks1,font=baseFont,fontsize=12)

sub[1].scatter(a,d,c=c,cmap='hsv')

sub[1].set_thetamin(-90)
sub[1].set_thetamax(90)
sub[1].set_ylim(0,5.1)
sub[1].set_xticks(aTicks,labels=aLabels,font=baseFont,fontsize=12)
sub[1].set_yticks(dTicks2,labels=dTicks2,font=baseFont,fontsize=12)

plt.show()

Шрифт отметки угловой оси изменен на Helvetica, а шрифт отметки радиальной оси остается шрифтом по умолчанию.

Я также попытался изменить плотность делений и подтвердил, что sub[0].set_yticks() может влиять на отметки радиальной оси, но единственное, что не меняется, - это шрифт метки делений. Полученное изображение прикрепляю.

Результат сюжета

Ваш код работает нормально. Пожалуйста, проверьте путь к файлу шрифта.

chankruze 28.04.2024 11:05

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

Hosea Chan 28.04.2024 17:37

Ах! окей, я получил то, что ты хочешь. Пожалуйста, проверьте ответ.

chankruze 29.04.2024 18:33
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот рабочий код:

import matplotlib.pyplot as plt
import numpy as np
# import global font_manager
from matplotlib import font_manager

# add the custom font to the global font manager (don't create an instance)
font_manager.fontManager.addfont('Jersey15.ttf')  # font ttf file path
# in this case 'Jersey15.ttf' has a font family 'Jersey 15' (note the name, I think you got it already)

a = np.random.uniform(-np.pi / 2, np.pi / 2, 100)
d = np.random.uniform(0, 20, 100)
c = np.random.uniform(0, 1, 100)

fig, sub = plt.subplots(1, 2, subplot_kw = {'polar': [True, True]})

# configure the ticks
aTicks = np.linspace(-np.pi / 2, np.pi / 2, 7, endpoint=True)
aLabels = np.linspace(-90, 90, 7, endpoint=True)
dTicks1 = np.arange(0, 20.1, 5)
dTicks2 = np.arange(0, 5.1, 1)

# plot the first graph
sub[0].scatter(a, d, c=c, cmap='hsv')

sub[0].set_thetamin(-90)
sub[0].set_thetamax(90)
sub[0].set_ylim(0, 20.1)
sub[0].set_xticks(aTicks, labels=aLabels)
sub[0].set_yticks(dTicks1, labels=dTicks1)
# use the `font_manager.FontProperties(fontname).get_name()` for the font family (i.e. 'Jersey 15' or 'Bernard MT 
# Condensed')
sub[0].tick_params(labelfontfamily=font_manager.FontProperties("Jersey 15").get_name(), labelsize=20)
# or, you can use the name for the font family directly also
# sub[1].tick_params(labelfontfamily = "Jersey 15", labelsize=12)

sub[1].scatter(a, d, c=c, cmap='hsv')

sub[1].set_thetamin(-90)
sub[1].set_thetamax(90)
sub[1].set_ylim(0, 5.1)
sub[1].set_xticks(aTicks, labels=aLabels)
sub[1].set_yticks(dTicks2, labels=dTicks2)
# you can use the name for the font family directly also
sub[1].tick_params(labelfontfamily = "Jersey 15", labelsize=12)

plt.show()

Это дает следующий результат:

Джерси 15 Гельветика

Чтобы проверить доступные шрифты, вы можете использовать font_manager.get_font_names().

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

  1. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.tick_params.html
  2. https://matplotlib.org/stable/gallery/ticks/tick-formatters.html

Другие вопросы по теме