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

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()

关键修改说明

  1. 修复Y轴重复指数:ax.yaxis.set_major_formatter(ticker.LogFormatterSciNotation()) 会将指数统一显示在Y轴顶部,刻度值仅保留系数,避免每个刻度重复标注10^-1。
  2. 缩小图表:将figsize=(10.0,8.0)调整为(8,6),可根据需求进一步缩小(如(7,5))。
  3. 修正代码错误:原代码直接使用fc[0]和xfitplot[0]会引发未定义错误,添加了列表初始化步骤。
  4. 启用布局优化:启用plt.tight_layout()自动调整元素间距,避免标签或刻度重叠。

内容的提问来源于stack exchange,提问作者Derrick Rossi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:12:52