Pandas子图布局自定义:分组展示数据并设置不同子图高度(共享X轴)
自定义子图布局解决方案
刚好做过类似的布局调整,我来给你一个简洁的实现方法!要实现你想要的「上方单列子图+下方双列子图、高度不同且共享X轴」的效果,我们可以直接用matplotlib的子图创建工具手动控制布局,而不是依赖pandas默认的subplots=True参数。
完整代码示例
import pandas as pd import matplotlib.pyplot as plt # 初始化你的DataFrame df = pd.DataFrame({'A': range(0,-10,-1), 'B': range(10,20), 'C': range(10,30,2)}) # 创建2行1列的子图,共享X轴,指定高度比例 fig, (ax_top, ax_bottom) = plt.subplots( nrows=2, ncols=1, sharex=True, gridspec_kw={'height_ratios': [1, 2]} # 比例可按需调整,比如[2,3]就是上2下3的高度占比 ) # 上方子图绘制A列数据 df['A'].plot(ax=ax_top, title='Column A') # 下方子图同时绘制B和C列数据 df[['B', 'C']].plot(ax=ax_bottom, title='Columns B & C') # 自动调整布局,避免标题、标签重叠 plt.tight_layout() plt.show()
关键参数说明
sharex=True:强制两个子图共享X轴,缩放、拖动时X轴会同步变化,完全符合你的需求gridspec_kw={'height_ratios': [1, 2]}:这是控制子图高度的核心参数,列表里的数值代表每个子图的高度占比。比如你想让上方子图更高,可以改成[2,1],数值比例可以自由调整ax=ax_top/ax=ax_bottom:通过指定绘图的目标子图对象,把不同的列数据精准放到对应的位置上
额外优化
如果觉得子图之间的间距不合适,可以在plt.tight_layout()之后加上plt.subplots_adjust(hspace=0.2)来手动调整垂直间距,hspace的取值范围是0到1,数值越大间距越宽。
内容的提问来源于stack exchange,提问作者Ranny
相关产品推荐
相关产品推荐

