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

如何在Matplotlib中设置指数型X轴刻度并优化中间刻度显示

解决方案

优化后的代码(基于原x轴位置逻辑)

import matplotlib.pyplot as plt
import seaborn as sns

# 定义主刻度(10^k)的位置和标签
major_tick_pos = [2, 6, 10, 14, 18]
major_tick_labels = ['$10^{2}$', '$10^{3}$', '$10^{4}$', '$10^{5}$', '$10^{6}$']

# 定义中间刻度(5×10^k)的位置和标签
minor_tick_pos = [4, 8, 12, 16]
minor_tick_labels = ['$5 \\times 10^{2}$', '$5 \\times 10^{3}$', '$5 \\times 10^{4}$', '$5 \\times 10^{5}$']

# 合并刻度配置
all_tick_pos = major_tick_pos + minor_tick_pos
all_tick_labels = major_tick_labels + minor_tick_labels

# 绘制折线图
plt.plot(range(2, len(data)+2), data, marker='o', mfc='red')

# 设置x轴刻度:仅保留需要的刻度,移除无标签冗余刻度
plt.xticks(all_tick_pos, all_tick_labels)

# 移除右侧和顶部边框
sns.despine(right=True, top=True)

plt.ylabel("Probability")
plt.xlabel("Sampling size")
plt.show()

关键改动说明

  • 去掉原代码中大量空字符串的刻度标签,明确指定需要显示的刻度位置和对应标签,直接消除了无意义的冗余刻度线。
  • 将主刻度和中间刻度拆分定义,代码可读性更强,后续调整刻度位置或标签更灵活。
  • 修正原代码中len(percen_nonzero_runs)的潜在不匹配问题,统一使用len(data)确保刻度数量与数据点数量一致。

更合理的进阶方案(直接使用实际采样大小作为x轴)

如果你的数据对应实际的采样大小数值(比如100、250、500...),建议直接用采样大小作为x轴坐标,这样逻辑更直观,也便于后续维护:

import matplotlib.pyplot as plt
import seaborn as sns

# 替换为你实际的采样大小数组
sampling_sizes = [100, 250, 500, 750, 1000, 1250, 1500, 1750, 1000000]
# 替换为你的实际数据
data = [0.1, 0.3, 0.5, 0.7, 0.8, 0.85, 0.88, 0.9, 0.95]

plt.plot(sampling_sizes, data, marker='o', mfc='red')

# 直接按采样大小设置刻度
plt.xticks(
    [100, 500, 1000, 5000, 10000, 50000, 100000, 500000, 1000000],
    ['$10^{2}$', '$5 \\times 10^{2}$', '$10^{3}$', '$5 \\times 10^{3}$', 
     '$10^{4}$', '$5 \\times 10^{4}$', '$10^{5}$', '$5 \\times 10^{5}$', '$10^{6}$']
)

sns.despine(right=True, top=True)
plt.ylabel("Probability")
plt.xlabel("Sampling size")
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:04:52