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

如何在Python单图中绘制不同刻度多线并呈现小刻度曲线变化

解决单图多曲线刻度差异大的绘图问题

当单图里一条曲线数值范围远大于另一条时,小范围曲线的细节很容易被掩盖,给你几个实用的解决办法:

1. 用双Y轴分开刻度

这是最常用的方法,给两条曲线分别分配左右两个Y轴,各自匹配对应的刻度范围,两边的刻度互不干扰,两条曲线的细节都能清晰展示。

示例代码:

import matplotlib.pyplot as plt
import numpy as np

# 模拟测试数据
x = np.linspace(0, 10, 100)
y_large = np.sin(x) * 1000  # 大范围曲线
y_small = np.cos(x) * 5     # 小范围曲线

fig, ax1 = plt.subplots()

# 画大范围曲线,绑定左侧Y轴
color = 'tab:red'
ax1.set_xlabel('X轴')
ax1.set_ylabel('大范围数值', color=color)
ax1.plot(x, y_large, color=color)
ax1.tick_params(axis='y', labelcolor=color)

# 创建右侧Y轴,画小范围曲线
ax2 = ax1.twinx()
color = 'tab:blue'
ax2.set_ylabel('小范围数值', color=color)
ax2.plot(x, y_small, color=color)
ax2.tick_params(axis='y', labelcolor=color)

fig.tight_layout()
plt.show()

2. 拆分成子图单独展示

把两条曲线分别放在上下或左右的子图里,每个子图用自己的刻度,完全避免互相干扰,细节展示最清楚。

示例代码:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y_large = np.sin(x) * 1000
y_small = np.cos(x) * 5

# 生成上下排列的子图,共享X轴
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, figsize=(8, 6))

# 上子图放大范围曲线
ax1.plot(x, y_large, color='tab:red')
ax1.set_ylabel('大范围数值')

# 下子图放小范围曲线
ax2.plot(x, y_small, color='tab:blue')
ax2.set_xlabel('X轴')
ax2.set_ylabel('小范围数值')

plt.tight_layout()
plt.show()

3. 改用对数坐标轴(适合量级差极大的场景)

如果两条曲线的数值量级差了好几个数量级(比如一个是几百,一个是0.001),把Y轴改成对数刻度,能同时容纳大小范围的数值,细节也能体现出来。

示例代码:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1, 10, 100)
y_large = np.exp(x)  # 指数级增长的大范围数据
y_small = np.log(x)  # 小范围数据

plt.plot(x, y_large, label='大范围曲线')
plt.plot(x, y_small, label='小范围曲线')
plt.yscale('log')  # 设置Y轴为对数刻度
plt.xlabel('X轴')
plt.ylabel('数值(对数刻度)')
plt.legend()
plt.show()

4. 给小范围曲线加偏移量(适合不想改轴的情况)

如果不想用双Y轴或子图,可以给小范围曲线加一个固定偏移量,让它在同一轴上和大曲线分开,同时标注清楚实际数值范围。

示例代码:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y_large = np.sin(x) * 1000
y_small = np.cos(x) * 5

offset = 200  # 偏移量,让小曲线在大曲线下方展示
y_small_shifted = y_small + offset

plt.plot(x, y_large, label='大范围曲线')
plt.plot(x, y_small_shifted, label='小范围曲线(偏移+200)')
plt.xlabel('X轴')
plt.ylabel('数值')
plt.legend()
# 手动标注小曲线的实际数值范围
plt.text(8, offset+3, '实际范围:-5~5', fontsize=10)
plt.show()

内容的提问来源于stack exchange,提问作者Havva Mehralitabar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:23:36