使用Seaborn Objects(v0.12)绘制双Y轴图时遇到问题
Seaborn Objects 双Y轴绘制解决方案
你的代码问题在于Seaborn Objects的链式调用逻辑:add方法中的ax参数仅指定当前元素绘制的轴,但链式调用的Plot实例仍关联初始轴,导致第二个add并未在ax2上生效。
正确的做法是为每个轴单独创建Plot实例并绑定对应轴:
import pandas as pd import matplotlib.pyplot as plt import seaborn.objects as so df = pd.DataFrame( {"x": [1, 2, 3, 4, 5], "y1": [5, 2, 1, 6, 2], "y2": [100, 240, 130, 570, 120]} ) fig, ax1 = plt.subplots(1, 1, figsize=(10, 5)) ax2 = ax1.twinx() # 绑定ax1绘制柱状图 (so.Plot(df, x="x", y="y1") .add(so.Bar(), ax=ax1) .plot()) # 绑定ax2绘制折线图 (so.Plot(df, x="x", y="y2") .add(so.Line(color="#ff7f0e"), ax=ax2) .plot()) # 设置轴标签区分双轴 ax1.set_ylabel("y1 数值") ax2.set_ylabel("y2 数值") plt.title("Seaborn Objects 双Y轴示例") plt.show()
或者也可以用on方法指定轴,本质和上述逻辑一致:
# 另一种写法:用on指定轴 (so.Plot(df, x="x", y="y1") .on(ax1) .add(so.Bar()) .plot()) (so.Plot(df, x="x", y="y2") .on(ax2) .add(so.Line(color="#ff7f0e")) .plot())
核心原因是Seaborn Objects的设计中,单个Plot实例默认对应一个坐标轴,双轴场景需要拆分两个独立的Plot分别绑定不同的轴进行绘制。
内容的提问来源于stack exchange,提问作者divingTobi
相关产品推荐
相关产品推荐

