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

如何为坐标轴设置分段混合刻度(对数+线性)以优化数据展示

实现分段混合刻度的X轴(对数+线性+对数)

要实现你需要的分段混合刻度X轴,可借助Matplotlib的轴分割工具,创建三个共享Y轴的子轴,分别对应三个区间并配置不同刻度类型,模拟连续坐标轴的效果。以下是具体实现方案:

步骤与代码示例

1. 导入依赖库

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np

2. 创建画布与分割坐标轴

创建主画布后,使用make_axes_locatable将主轴分割为三个水平区域,对应三段X轴范围:

fig, ax_main = plt.subplots(figsize=(10, 6))
divider = make_axes_locatable(ax_main)

# 按比例创建三个子轴,可根据需求调整宽度比例
ax_left = divider.append_axes("bottom", size="30%", pad=0, sharey=ax_main)
ax_mid = divider.append_axes("bottom", size="40%", pad=0, sharey=ax_main)
ax_right = divider.append_axes("bottom", size="30%", pad=0, sharey=ax_main)

# 隐藏主轴的X轴刻度,只保留子轴的刻度
ax_main.xaxis.set_visible(False)

3. 配置各子轴的刻度与范围

分别对三个子轴设置对应的数据范围、刻度类型,并调整外观以模拟连续坐标轴:

# 左段:0.00001-0.1,对数刻度
ax_left.set_xscale("log")
ax_left.set_xlim(1e-5, 0.1)
# 调整刻度标签,避免重叠
ax_left.set_xticks([1e-5, 1e-4, 1e-3, 0.01, 0.1])
ax_left.tick_params(axis='x', labelsize=10)

# 中段:0.1-0.95,线性刻度
ax_mid.set_xscale("linear")
ax_mid.set_xlim(0.1, 0.95)
ax_mid.set_xticks([0.1, 0.3, 0.5, 0.7, 0.9])
ax_mid.tick_params(axis='x', labelsize=10)
# 隐藏中段顶部的spine,避免重复线条
ax_mid.spines['top'].set_visible(False)

# 右段:0.95-1,对数刻度
ax_right.set_xscale("log")
ax_right.set_xlim(0.95, 1)
# 自定义对数刻度标签,适配小范围
ax_right.set_xticks([0.95, 0.97, 0.99, 1])
ax_right.set_xticklabels(['0.95', '0.97', '0.99', '1'])
ax_right.tick_params(axis='x', labelsize=10)
# 隐藏右段顶部和左侧的spine
ax_right.spines['top'].set_visible(False)
ax_right.spines['left'].set_visible(False)

4. 绘制示例数据

生成模拟数据并在三个子轴分别绘制:

# 生成模拟数据
x_left = np.logspace(-5, -1, 100)
y_left = np.random.normal(0, 2, 100)  # 左段波动数据

x_mid = np.linspace(0.1, 0.95, 100)
y_mid = np.full(100, 0) + np.random.normal(0, 0.2, 100)  # 中段稳定数据

x_right = np.linspace(0.95, 1, 100)
y_right = np.random.normal(0, 2, 100)  # 右段波动数据

# 绘制数据
ax_left.plot(x_left, y_left, 'b-')
ax_mid.plot(x_mid, y_mid, 'b-')
ax_right.plot(x_right, y_right, 'b-')

5. 调整整体布局

# 调整子轴间距,让坐标轴更连贯
plt.subplots_adjust(hspace=0)
# 添加Y轴标签
ax_main.set_ylabel("数据值")
plt.show()

样式调整说明

  • 可通过修改子轴的size参数调整三段X轴的宽度比例,匹配目标视觉效果
  • 可自定义各段的xticks和xticklabels,优化刻度显示的清晰度
  • 若需要隐藏子轴的Y轴刻度,可添加ax_left.yaxis.set_visible(False)等语句

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:52:40