如何在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
相关产品推荐
相关产品推荐

