Следующее может независимо установить цвет, шрифт и размер шрифта для левой и правой оси Y, но не может установить шрифт или размер шрифта для оси X. Он может установить цвет оси x. Я использую ParasiteAxes, поскольку они позволяют мне изменять форматирование графика другими способами при работе с matplotlib.animation. Цель состоит в том, чтобы иметь возможность устанавливать шрифт, размер шрифта и цвет по-разному для каждой из меток оси, и они не должны зависеть от меток (по крайней мере, от размера). `
from mpl_toolkits.axisartist.parasite_axes import HostAxes, ParasiteAxes
import matplotlib.pyplot as plt
plt.rcParams.update({'font.size': 16})
plt.rcParams.update({'font.weight': 'normal'})
plt.rcParams.update({'font.family': 'times new roman'})
x = [0, 1, 2]
y1 = [0, 1, 2]
y2 = [1, 2, 3]
fig = plt.figure(figsize=(8, 4.5))
host = fig.add_axes([0.10, 0.1, 0.60, 0.85], axes_class=HostAxes)
host.set_xlim(0, 2)
host.axis["right"].set_visible(False)
host.axis["left"].set_visible(False)
host.set_xlabel('X Axis', fontsize=24, fontfamily='courier new', color='tab:green')
y1_color = 'tab:red'
y1_axis = ParasiteAxes(host, sharex=host)
host.parasites.append(y1_axis)
y1_axis.axis['y1'] = y1_axis.new_fixed_axis(loc='left', offset=(0, 0))
y1_axis.set_ylim(0, 4)
y1_axis.set_ylabel('Y1 Axis')
y1_axis.axis['y1'].label.set(fontsize=12, color=y1_color, fontfamily='courier new')
y1_line, = y1_axis.plot([], [], lw=2, color=y1_color)
y1_line.set_data(x, y1)
y2_color = 'tab:blue'
y2_axis = ParasiteAxes(host, sharex=host)
host.parasites.append(y2_axis)
y2_axis.axis['y2'] = y2_axis.new_fixed_axis(loc='right', offset=(0, 0))
y2_axis.set_ylim(0, 4)
y2_axis.set_ylabel('y2 Axis')
y2_axis.axis['y2'].label.set(fontsize=24, color=y2_color, fontfamily='arial')
y2_line, = y2_axis.plot([], [], lw=2, color=y2_color)
y2_line.set_data(x, y2)
plt.show()
`
Вот получившийся сюжет:
Я ожидал, что метка оси X в приведенном выше коде будет зеленой, 24 пункта Courier New, но на графике она отображается зеленым шрифтом Times New Roman, 16 пунктов (взято из rcParams, за исключением цвета. Если rcParams изменены затем изменяются метки, которые я хочу оставить независимыми от метки оси X. Я был бы признателен за решение, а также за объяснение того, почему объекты с двумя осями ведут себя по-разному.
Я не могу сказать, почему способ, которым вы в настоящее время настраиваете свойства xlabel, не работает, но похоже, что вы используете
host.set_xlabel('X Axis')
host.axis["bottom"].label.set(fontsize=24, fontfamily='courier new', color='tab:green')
вместо host.set_xlabel('X Axis', fontsize=24, fontfamily='courier new', color='tab:green')
решает это с помощью matplotlib 3.6.2.
Спасибо, это решает мою проблему. К сожалению, существует несколько API, которые имеют одну и ту же функцию, но различаются и не задокументированы. Если кто-то знает о документации, описывающей API, который я предоставил в примере, было бы неплохо иметь указатель для справки.
Мне не понятна цель вашего отзыва. Вы просите меня изменить пример на другой шрифт, предоставляя отзыв для обучения, или считаете, что отсутствие встроенной поддержки шрифта является частью проблемы? В приведенном примере шрифт courier_new в моей системе работает, и в результате метка «Ось Y1» отображается как закодированная, но не для оси X. Если я изменю шрифт с «courier new» на «fantasy», основная проблема останется.