Python对数Y轴绘图优化:消除刻度指数重复并缩小图表
解决matplotlib对数Y轴指数重复显示及图表缩小问题
核心解决方案
1. 消除Y轴刻度重复的指数标注
通过设置Y轴刻度格式化器,让指数仅作为Y轴标签显示一次,刻度值只保留系数部分。使用matplotlib.ticker.LogFormatterSciNotation可直接实现该效果。
2. 缩小图表并优化布局
调整plt.figure()的figsize参数减小图表尺寸,同时启用plt.tight_layout()自动调整元素间距,避免文字或刻度重叠。
修改后的完整代码
from __future__ import division import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl from scipy.interpolate import griddata, UnivariateSpline import math from matplotlib import ticker # 全局绘图参数配置 plt.rcParams.update({ 'text.usetex': True, 'font.family':'serif', 'mathtext.fontset' : 'cm', 'mathtext.rm': 'serif', 'font.weight': 'normal', 'axes.labelweight': 'normal', 'axes.linewidth': 1.5, 'xtick.major.width': 1.5, 'xtick.major.size': 10.0, 'xtick.minor.size': 5.0, 'ytick.major.width': 1.5, 'ytick.major.size': 10.0, 'ytick.minor.size': 5.0, 'font.size': 30}) plt.rcParams.update({'font.size': 20}) # 数据初始化(修正原代码未定义列表的问题) Lx_array = [200, 220, 240, 260, 280, 300, 320, 340, 360, 380] fc = [] fc.append([0.12157595414600386, 0.12041770132162587, 0.12047596487921948, 0.12052880984177164, 0.12057638017580277, 0.12061976850950093, 0.12065915948174381, 0.12069532559157949, 0.12072842279963499, 0.12140365733314845]) xfitplot = [] xfitplot.append([200.0, 380.0]) # L_x的范围 yfitplot = [] yfitplot.append([0.12048675725819148, 0.00041285587251701833]) # 拟合参数 # 创建缩小后的图表 fig = plt.figure(figsize=(8, 6)) # 调整尺寸缩小图表 subplot(221) ax = plt.gca() # 绘制误差棒和拟合线 plt.errorbar(Lx_array, fc[0], fmt='s', ms=10, label=r"$a)$") plt.plot([Lx_array[0], Lx_array[-1]], [yfitplot[0][0] * Lx_array[0]**yfitplot[0][1], yfitplot[0][0] * Lx_array[-1]**yfitplot[0][1]], 'r--', lw=4) # 设置边框线宽 for axis in ['top','bottom','left','right']: ax.spines[axis].set_linewidth(1.5) # 设置对数刻度 ax.set_xscale('log') ax.set_yscale('log') # 设置刻度方向向内 ax.tick_params(direction='in') ax.tick_params(direction='in', which='minor') # 关键:设置Y轴刻度格式化器,消除重复指数 ax.yaxis.set_major_formatter(ticker.LogFormatterSciNotation()) # 设置标签和刻度大小 plt.ylabel(r'$f_c$', fontsize=30) plt.xticks(size=25) plt.yticks(size=25) # 设置图例 plt.legend(loc='upper right', fontsize=20) # 优化布局 plt.tight_layout() plt.show()
关键修改说明
- 修复Y轴重复指数:
ax.yaxis.set_major_formatter(ticker.LogFormatterSciNotation())会将指数统一显示在Y轴顶部,刻度值仅保留系数,避免每个刻度重复标注10^-1。 - 缩小图表:将
figsize=(10.0,8.0)调整为(8,6),可根据需求进一步缩小(如(7,5))。 - 修正代码错误:原代码直接使用
fc[0]和xfitplot[0]会引发未定义错误,添加了列表初始化步骤。 - 启用布局优化:启用
plt.tight_layout()自动调整元素间距,避免标签或刻度重叠。
内容的提问来源于stack exchange,提问作者Derrick Rossi
相关产品推荐
相关产品推荐

