如何修改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
相关产品推荐
相关产品推荐

