You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Matplotlib极坐标图径向轴刻度标签字体?

极坐标图径向轴刻度字体无法修改的解决方法

我尝试创建两个极坐标散点图(其中一个是另一个的放大版本),角度轴的字体属性可以正常配置,但修改径向轴字体的尝试始终未成功。

尝试过的代码

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

# 定义字体
baseFont = FontProperties(family='Helvetica', fname=[你的ttf文件路径])

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]})

# 配置刻度
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)

# 绘制第一个图
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,但径向轴的刻度字体仍为默认字体。确认set_yticks()能正常调整径向轴的刻度标记密度,但无法修改字体。

解决方法

在Matplotlib的极坐标图中,径向轴(y轴)的set_yticks()方法无法直接传递字体参数,需要通过以下两种方式修改:

方式1:显式使用set_yticklabels()指定字体

将原来的set_yticks()拆分,先设置刻度位置,再单独设置刻度标签的字体属性:

# 第一个图的径向轴设置
sub[0].set_yticks(dTicks1)
sub[0].set_yticklabels(dTicks1, fontproperties=baseFont, fontsize=12)

# 第二个图的径向轴设置
sub[1].set_yticks(dTicks2)
sub[1].set_yticklabels(dTicks2, fontproperties=baseFont, fontsize=12)

方式2:使用tick_params()统一配置轴刻度字体

通过轴对象的tick_params()方法,直接指定y轴(径向轴)的字体属性:

# 第一个图的径向轴设置
sub[0].set_yticks(dTicks1, labels=dTicks1)
sub[0].tick_params(axis='y', labelsize=12, fontproperties=baseFont)

# 第二个图的径向轴设置
sub[1].set_yticks(dTicks2, labels=dTicks2)
sub[1].tick_params(axis='y', labelsize=12, fontproperties=baseFont)

修改后的完整代码

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

# 定义字体
baseFont = FontProperties(family='Helvetica', fname=[你的ttf文件路径])

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]})

# 配置刻度
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)

# 绘制第一个图
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)
sub[0].set_yticklabels(dTicks1, fontproperties=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)
sub[1].set_yticklabels(dTicks2, fontproperties=baseFont, fontsize=12)

plt.show()

内容的提问来源于stack exchange,提问作者Hosea Chan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 21:47:03