matplotlib绘制柱对称图像时如何让X轴两侧均显示从0开始的正数
你要实现的是将下图左侧的负数X轴刻度替换为绝对值显示的正数值:
不需要修改原始绘图数据,仅修改X轴刻度标签即可,有两种常用实现方案:
方案1:直接替换刻度标签(简单直观,适合固定刻度场景)
直接获取当前X轴的刻度位置,将标签替换为对应绝对值即可,示例代码如下:
import matplotlib.pyplot as plt import numpy as np # 示例数据:X为-5到5的对称区间,Y为柱对称分布数据 x = np.linspace(-5, 5, 100) y = np.exp(-(x ** 2) / 2) plt.plot(x, y) # 核心修改代码:获取刻度后替换标签为绝对值 xtick_pos = plt.xticks()[0] plt.xticks(xtick_pos, labels=[abs(val) for val in xtick_pos]) plt.show()
方案2:使用格式化器自动适配(灵活,适合需要缩放/动态调整的场景)
用FuncFormatter自定义X轴格式化规则,任何时候都会自动将刻度值转换为绝对值显示,不需要手动更新刻度:
import matplotlib.pyplot as plt import numpy as np from matplotlib.ticker import FuncFormatter # 自定义绝对值格式化函数 def format_abs(x, pos): return f"{abs(x):g}" # 示例数据和绘图 x = np.linspace(-5, 5, 100) y = np.exp(-(x ** 2) / 2) plt.plot(x, y) # 核心修改代码:给X轴设置自定义格式化器 ax = plt.gca() ax.xaxis.set_major_formatter(FuncFormatter(format_abs)) plt.show()
注意:不要直接将原始X数据转换为绝对值再绘图,会导致左半部分数据和右半部分重叠,只需要修改刻度标签即可,原始带正负的X数据要保留以保证绘图位置正确。
内容的提问来源于stack exchange,提问作者David Shulman
相关产品推荐
相关产品推荐

