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

使用Seaborn Objects API绘图时图例遮挡数据的解决方法咨询

解决Seaborn Objects API图例遮挡数据的规避方案

方案1:将图例移至图表外部右侧

利用Seaborn Objects的.legend()方法,通过bbox_to_anchor参数将图例定位到图表区域外,同时调整布局避免图例被截断:

import seaborn.objects as so
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

res_df = pd.DataFrame(
 {'value': np.random.rand(20),
 'cfg__status_during_transmit': ['OK']*5 + ['ERR']*5 + ['WARN']*5 + ['OTH']*5}
)

plot = (
    so.Plot(res_df, y='value', x='cfg__status_during_transmit', color='cfg__status_during_transmit')
    .add(so.Dots(), so.Jitter(width=0.5))
    .layout(size=(8, 4))
    .legend(loc="upper right", bbox_to_anchor=(1.2, 1))  # 把图例移到右侧外部
)

# 获取matplotlib轴对象,调整子图边距
ax = plot.on(plt.gca()).plot()
plt.subplots_adjust(right=0.8)  # 留出右侧空间容纳图例
plt.show()

方案2:将图例移至图表底部横向排列

把图例放在图表下方横向分布,既不遮挡数据,也能保持图表紧凑:

import seaborn.objects as so
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

res_df = pd.DataFrame(
 {'value': np.random.rand(20),
 'cfg__status_during_transmit': ['OK']*5 + ['ERR']*5 + ['WARN']*5 + ['OTH']*5}
)

plot = (
    so.Plot(res_df, y='value', x='cfg__status_during_transmit', color='cfg__status_during_transmit')
    .add(so.Dots(), so.Jitter(width=0.5))
    .layout(size=(8, 4))
    .legend(loc="lower center", bbox_to_anchor=(0.5, -0.2), ncol=4)  # 底部横向排列图例项
)

# 调整底部边距容纳图例
ax = plot.on(plt.gca()).plot()
plt.subplots_adjust(bottom=0.2)
plt.show()

方案3:手动精细调整图例位置

直接获取matplotlib的图例对象,自定义位置和布局参数,实现更灵活的控制:

import seaborn.objects as so
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

res_df = pd.DataFrame(
 {'value': np.random.rand(20),
 'cfg__status_during_transmit': ['OK']*5 + ['ERR']*5 + ['WARN']*5 + ['OTH']*5}
)

# 创建matplotlib画布和轴
fig, ax = plt.subplots(figsize=(8, 4))
plot = (
    so.Plot(res_df, y='value', x='cfg__status_during_transmit', color='cfg__status_during_transmit')
    .add(so.Dots(), so.Jitter(width=0.5))
    .on(ax)
    .plot()
)

# 获取图例并调整位置
legend = ax.get_legend()
legend.set_bbox_to_anchor((1.05, 1))  # 向右上方偏移至图表外
legend.set_loc("upper left")

# 调整子图布局避免图例被截断
fig.subplots_adjust(right=0.8)
plt.show()

内容的提问来源于stack exchange,提问作者MuhammedYunus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:52:51