如何用Matplotlib绘制双x/y轴且网格基于第一轴的空白图表?
双轴空白图表解决方案(网格基于第一组轴)
直接用以下代码即可实现需求:既保留基于第一组x/y轴的网格,又能显示第二组轴的轴线,无需手动修改图片:
import matplotlib.pyplot as plt # 创建画布与第一组坐标轴(用于抄录数据) fig, ax1 = plt.subplots(figsize=(8, 6)) # 设置第一组轴的刻度范围(根据实际数据调整) ax1.set_xlim(0, 100) ax1.set_ylim(0, 200) # 开启第一组轴的网格,网格将完全基于第一组轴 ax1.grid(True, linestyle='--', alpha=0.7) # 创建顶部第二x轴(用于计算验证) ax2 = ax1.twiny() ax2.set_xlim(0, 50) # 第二x轴的范围,按需调整 ax2.set_frame_on(False) # 关闭第二轴的完整框架,避免覆盖网格 # 手动开启第二x轴的顶部轴线 ax2.spines['top'].set_visible(True) # 设置第二x轴仅在顶部显示刻度与标签 ax2.tick_params(axis='x', top=True, bottom=False, labeltop=True) # 创建右侧第二y轴(用于计算验证) ax3 = ax1.twinx() ax3.set_ylim(0, 100) # 第二y轴的范围,按需调整 ax3.set_frame_on(False) # 关闭第二轴的完整框架 # 手动开启第二y轴的右侧轴线 ax3.spines['right'].set_visible(True) # 设置第二y轴仅在右侧显示刻度与标签 ax3.tick_params(axis='y', right=True, left=False, labelright=True) # 隐藏第一组轴的顶部/右侧轴线,避免重复显示 ax1.spines['top'].set_visible(False) ax1.spines['right'].set_visible(False) plt.show()
关键逻辑说明:
- 先基于第一组轴
ax1开启网格,确保网格完全贴合抄录数据用的轴 - 对第二组轴设置
set_frame_on=False,避免其完整框架覆盖第一轴的网格 - 手动开启第二组轴需要显示的轴线(顶部x轴、右侧y轴),并设置刻度仅在对应侧显示
- 隐藏第一组轴的冗余轴线,让图表布局更整洁
你可以根据实际需求调整轴的刻度范围、网格样式(比如linestyle、alpha参数)以及刻度标签的显示状态。
内容的提问来源于stack exchange,提问作者chrisrucksack
相关产品推荐
相关产品推荐

