如何用Matplotlib绘制零高度Y轴的英寸-毫米转换一维标尺
解决方法
你只需要对代码做几处调整即可实现效果:
- 初始化画布时设置极小的画布高度,适配一维标尺的形态
- 将Y轴范围限制为
[0, 0]直接压缩垂直空间 - 隐藏所有Y轴相关的显示元素
- 微调两个X轴的标签边距,让上下刻度标识贴合显示
修改后完整可运行代码如下:
import matplotlib.pyplot as plt from matplotlib.ticker import MultipleLocator from fractions import Fraction # 画布宽度可按需调整,高度设为极小值适配一维标尺 fig, ax1 = plt.subplots(figsize=(12, 0.5)) ax2 = ax1.twiny() # 底部毫米刻度配置 ax1.set_xlim(0, 25.4) ax1.xaxis.set_major_locator(MultipleLocator(1)) ax1.xaxis.set_major_formatter('{x:.0f}') ax1.xaxis.set_minor_locator(MultipleLocator(0.5)) # 调整底部标签边距,向上贴合 ax1.tick_params(axis='x', pad=0) # 顶部英寸刻度配置 ax2.set_xlim(0, 1) ax2.xaxis.set_major_locator(MultipleLocator(1/16)) ax2.xaxis.set_major_formatter(lambda x, pos: str(Fraction(x))) ax2.xaxis.set_minor_locator(MultipleLocator(1/32)) # 调整顶部标签边距,向下贴合 ax2.tick_params(axis='x', pad=0) # 压缩Y轴为0高度,隐藏所有Y轴元素 ax1.set_ylim(0, 0) ax1.yaxis.set_visible(False) # 隐藏多余边框 ax1.spines[['left', 'right', 'bottom', 'top']].set_visible(False) ax2.spines[['left', 'right', 'bottom', 'top']].set_visible(False) plt.tight_layout() # 如需直接导出可打印高清矢量图,可替换plt.show()为下面的代码 # plt.savefig('inch_mm_ruler.svg', dpi=300, bbox_inches='tight') plt.show()
内容的提问来源于stack exchange,提问作者k314159
相关产品推荐
相关产品推荐

