Я попытался создать две диаграммы полярного рассеяния, одна из которых представляла собой увеличение другой. У меня нет проблем с настройкой свойств шрифта угловой оси, но мои попытки изменить шрифты радиальной оси не увенчались успехом.
Я попытался использовать 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() может влиять на отметки радиальной оси, но единственное, что не меняется, - это шрифт метки делений. Полученное изображение прикрепляю.
Результат сюжета
Код должен работать нормально, но тот же результат графика на связанном изображении по-прежнему показывает, что шрифт радиальной оси не изменен на Helvetica. Однако изменение шрифта по угловой оси прошло успешно, поэтому путь к файлу шрифта не должен быть проблемой.
Ах! окей, я получил то, что ты хочешь. Пожалуйста, проверьте ответ.






Вот рабочий код:
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()
Это дает следующий результат:
Чтобы проверить доступные шрифты, вы можете использовать font_manager.get_font_names().
Я думаю, это укажет вам правильное направление. Я прикрепил ссылки, которые я прочитал, чтобы получить представление ниже, пожалуйста, обратитесь к ним, если вы хотите узнать больше.
Ваш код работает нормально. Пожалуйста, проверьте путь к файлу шрифта.