Matplotlib pyplot中的ParasiteAxes不允许格式化x标签。

3
以下内容可以独立设置左右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()

下面是生成的图表:

pyplot output with undesired x-label font and font size

我在上述代码中期望的x轴标签是绿色24号Courier New字体,但在图表中它出现了绿色16号Times New Roman字体(除颜色外取自rcParams)。如果修改rcParams,则会修改刻度标签,而我希望刻度标签独立于x轴标签。我希望得到解决方案,同时也想知道为什么这两个轴对象行为不同。


我不清楚您反馈的目的。您是要求我将示例更改为另一种字体,提供教育反馈,还是认为字体缺乏本地支持是问题的一部分?在提供的示例中,我的系统上的courier_new字体可以正常工作,并导致“Y1轴”标签出现为编码,但对于x轴则不是这样。如果我将字体从“Courier New”更改为“幻想”,则潜在问题仍然存在。 - gordonC
1个回答

1

我不知道你目前设置 xlabel 属性的方式为什么不起作用,但看起来使用

host.set_xlabel('X Axis')
host.axis["bottom"].label.set(fontsize=24, fontfamily='courier new', color='tab:green')

使用matplotlib 3.6.2,可以解决问题,而不是使用host.set_xlabel('X Axis', fontsize=24, fontfamily='courier new', color='tab:green')

enter image description here


1
谢谢,它解决了我的问题。很不幸,存在多个API,它们似乎具有相同的功能,但不同且未记录。如果有人知道覆盖我在示例中提供的API的文档,那么为参考提供指针将是很好的。 - gordonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接