You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 01:10:36