Python中如何将两个DataFrame堆叠柱状图叠加显示?
解决堆叠柱状图叠加遮挡的问题
嘿,我懂你遇到的麻烦了——直接在同一个轴上画两个堆叠柱状图,它们的柱子会完全重叠,后面的直接把前面的挡住了对吧?别担心,不用子图也能搞定,只需要给第二个堆叠图设置一个底部偏移量,让它从第一个堆叠图的顶部开始往上堆就行!
核心思路
先画第一个堆叠图,然后计算每个时间点的总高度(也就是该点所有堆叠柱子的总和),接着把第二个堆叠图的bottom参数设置为这个总高度数组,这样第二个图就会“站”在第一个图的肩膀上,实现上下叠加而不是重叠。
修改后的完整代码
import pandas as pd import matplotlib.pyplot as plt plt.style.use('ggplot') fig, ax = plt.subplots(figsize=(20,5)) # 先绘制热水数据的堆叠柱状图 hotwater_plot = hotwater_qa_1day.plot( kind='bar', stacked=True, width=1, colormap='autumn', ax=ax ) # 计算每个时间点热水数据的总高度,作为热力需求图的底部起点 bottom_offset = hotwater_qa_1day.sum(axis=1).values # 绘制热力需求的堆叠柱状图,指定bottom参数实现叠加 heatdemand_plot = heatdemand_qa_1day.plot( kind='bar', stacked=True, width=1, colormap='winter', ax=ax, bottom=bottom_offset ) # 设置图表标签和标题 plt.ylabel('Heat Demand and Hot Water') plt.xlabel('Time') plt.title('Combined Stacked Bar Chart') plt.show()
关键细节解释
hotwater_qa_1day.sum(axis=1):对DataFrame的每一行(每个时间点)求和,得到该点热水堆叠的总高度,这个数组的长度和x轴的时间点数量完全匹配,保证对齐。bottom=bottom_offset:告诉matplotlib,第二个堆叠图的每个柱子都从bottom_offset对应的高度开始绘制,而不是从0开始,这样就完美实现了上下叠加,不会互相遮挡。- 保持
width=1和同一个ax:确保两个图的柱子宽度一致,x轴完全对齐,叠加后看起来是一个完整的统一图表。
这样修改后,你就能看到热水和热力需求的堆叠柱状图上下组合在一起的完整效果啦!
内容的提问来源于stack exchange,提问作者Ola.Rad
相关产品推荐
相关产品推荐

