如何在Matplotlib中将科学计数法改为10^-6格式并设置粗体
解决方法及修改后代码
修改后完整代码
import matplotlib.pyplot as plt import matplotlib.ticker as ticker # 假设sig是已加载的numpy数组数据 import numpy as np time = sig[:, 0] # 数据第一列:时间 displacement = sig[:, 1] # 数据第二列:位移 font = {'family': 'Times New Roman', 'weight': 'bold', 'size': 16} fig, ax = plt.subplots(figsize = (9, 8)) # 设置画布尺寸(宽,高) ax.plot(time, displacement, linewidth = 2) ax.set_xlim(0, 3e-3) # 设置x轴范围 ax.set_ylim(-4e-6, 1e-6) # 设置y轴范围 # 修正x轴刻度:先指定刻度对应数值位置,再设置显示标签,避免错位 ax.set_xticks([0, 0.5e-3, 1e-3, 1.5e-3, 2e-3, 2.5e-3, 3e-3]) ax.set_xticklabels([0, 0.5, 1, 1.5, 2, 2.5, 3]) # 将y轴科学计数法切换为10^格式 y_formatter = ticker.ScalarFormatter(useMathText=True) y_formatter.set_powerlimits((-3, 3)) # 设置触发科学计数法的数值阈值 ax.yaxis.set_major_formatter(y_formatter) # 设置刻度标签样式 ax.tick_params(labelsize = 16) # 设置刻度标签字号 labels = ax.get_xticklabels() + ax.get_yticklabels() for label in labels: # 设置刻度标签的字体和加粗 label.set_fontname('Times New Roman') label.set_fontweight('bold') # 设置科学计数法偏移文本(如10^-6)的字体样式 ax.yaxis.offsetText.set_fontname('Times New Roman') ax.yaxis.offsetText.set_fontweight('bold') ax.yaxis.offsetText.set_fontsize(16) ax.set_xlabel('Time (msec.)', font) ax.set_ylabel('Displacement (m)', font) plt.show()
关键修改说明
- 切换科学计数法格式:使用
ScalarFormatter并开启useMathText=True,让Matplotlib采用TeX上标格式(10^-6)替代默认的1e-6;set_powerlimits()用于控制触发科学计数法的数值范围,适配你的数据区间。 - 加粗科学计数法标签:坐标轴旁的科学计数法偏移文本(如y轴的10^-6)需单独设置,通过
ax.yaxis.offsetText获取该文本对象,直接指定字体和加粗属性。 - 修正x轴刻度错位:原代码仅设置刻度标签未指定对应数值位置,可能导致标签与实际刻度错位,新增
set_xticks()指定刻度对应的真实数值,再设置显示标签保证对齐。
内容的提问来源于stack exchange,提问作者user18261878
相关产品推荐
相关产品推荐

