如何在Matplotlib同窗口中叠加绘制折线图/散点图与柱状图?
在Matplotlib/Pandas中叠加不同类型图表的实现方法
嘿,这两个问题本质上都是在同一个绘图轴(Axes)上叠加不同类型的可视化元素,核心思路就是复用同一个轴对象——不管你是用Pandas的便捷绘图接口,还是原生Matplotlib的函数,都能轻松实现。我给你分场景举具体的代码例子:
1. 散点图与柱状图互相叠加
不管是先画散点再叠柱状,还是先画柱状再叠散点,关键都是通过ax参数指定同一个轴对象。
示例1:先画柱状图,再叠加散点图
import pandas as pd import matplotlib.pyplot as plt # 构造测试数据 df = pd.DataFrame({ '类别': ['A', 'B', 'C', 'D'], '柱状数据': [12, 25, 18, 30], '散点数据': [15, 22, 20, 28] }) # 第一步:绘制柱状图,获取轴对象 ax = df.plot(kind='bar', x='类别', y='柱状数据', color='#87CEEB', alpha=0.8) # 第二步:在同一个轴上叠加散点图 df.plot(kind='scatter', x='类别', y='散点数据', color='#FF4500', s=120, ax=ax) # 美化图表 plt.title('柱状图叠加散点图') plt.ylabel('数值') plt.show()
示例2:先画散点图,再叠加柱状图
# 第一步:绘制散点图,获取轴对象 ax = df.plot(kind='scatter', x='类别', y='散点数据', color='#FF4500', s=120) # 第二步:在同一个轴上叠加柱状图(调整透明度避免遮挡) df.plot(kind='bar', x='类别', y='柱状数据', color='#87CEEB', alpha=0.6, ax=ax) plt.title('散点图叠加柱状图') plt.ylabel('数值') plt.show()
2. 折线图叠加柱状图
用plot(x,y)画完折线图后,同样可以通过获取当前轴对象来叠加柱状图,两种实现方式:
方式1:原生Matplotlib函数组合
import matplotlib.pyplot as plt # 测试数据 x = [1, 2, 3, 4, 5] y_line = [6, 8, 7, 9, 10] y_bar = [3, 5, 4, 6, 7] # 先画折线图 plt.plot(x, y_line, color='#2E8B57', marker='o', linewidth=2, label='折线数据') # 获取当前轴,叠加柱状图 current_ax = plt.gca() current_ax.bar(x, y_bar, color='#FFA500', alpha=0.5, label='柱状数据') # 添加图例和标签 plt.legend() plt.title('折线图叠加柱状图') plt.xlabel('X轴') plt.ylabel('Y轴') plt.show()
方式2:Pandas绘图接口组合
import pandas as pd df = pd.DataFrame({ 'x': x, '折线数据': y_line, '柱状数据': y_bar }) # 先画折线图,获取轴对象 ax = df.plot(x='x', y='折线数据', color='#2E8B57', marker='o', linewidth=2) # 叠加柱状图 df.plot(x='x', y='柱状数据', kind='bar', color='#FFA500', alpha=0.5, ax=ax) plt.legend() plt.title('折线图叠加柱状图') plt.show()
额外小技巧:处理Y轴范围差异大的情况
如果两种数据的数值范围相差很大,直接叠加会导致其中一个图表被压缩得看不清,这时候可以用双Y轴:
# 先画柱状图在左侧Y轴 ax1 = df.plot(kind='bar', x='类别', y='柱状数据', color='#87CEEB') ax1.set_ylabel('柱状数据数值') # 创建右侧Y轴,叠加散点图 ax2 = ax1.twinx() ax2.scatter(df['类别'], df['散点数据']*10, color='#FF4500', s=120) ax2.set_ylabel('散点数据数值(放大10倍)') plt.title('双Y轴叠加示例') plt.show()
内容的提问来源于stack exchange,提问作者Battu007
相关产品推荐
相关产品推荐

