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

如何用Seaborn/Matplotlib绘制指定折线图?代码需简短且图例置底

解决方案:Seaborn/Matplotlib实现分组折线图(图例置底)

一、Seaborn 常规API实现(≤10行,适合书籍展示)

用Seaborn经典API可快速生成符合要求的图表,代码简洁易懂:

import seaborn as sns
import matplotlib.pyplot as plt

sns.lineplot(data=df, x="rel_td", y="aret_ew", hue="Earnings news")
plt.legend(title="盈利新闻", bbox_to_anchor=(0.5, -0.15), loc="upper center", ncol=3)
plt.tight_layout()
plt.show()

通过bbox_to_anchor将图例定位到图表下方居中,ncol控制图例列数避免拥挤,tight_layout自动调整布局防止图例被截断。

二、Seaborn Objects 图例问题修复

若偏好Seaborn的声明式Objects API,只需配置图例位置参数即可解决之前的问题:

import seaborn.objects as so

(so.Plot(df, x="rel_td", y="aret_ew", color="Earnings news")
 .add(so.Line())
 .legend(title="盈利新闻", loc="upper center", bbox_to_anchor=(0.5, -0.15), ncol=3)
 .tight_layout()
 .show())

链式调用风格和plotnine类似,语法直观,代码同样控制在10行内。

三、Matplotlib 原生极简实现

如果需要更底层的控制,Matplotlib原生代码也能满足要求:

import matplotlib.pyplot as plt

for group, data in df.groupby("Earnings news"):
    plt.plot(data["rel_td"], data["aret_ew"], label=group)
plt.legend(title="盈利新闻", bbox_to_anchor=(0.5, -0.15), loc="upper center", ncol=3)
plt.tight_layout()
plt.show()

四、工具对比:plotnine vs Seaborn/Matplotlib

  • plotnine的类ggplot声明式语法在处理分组可视化时确实更直观,链式调用能一站式完成图层、配色、图例等配置,对熟悉R ggplot的用户友好度拉满。
  • Seaborn常规API胜在快速便捷,代码量极低;Objects API则兼顾了声明式风格和Python生态,解决图例问题后,简洁度和plotnine不相上下。
  • 原生Matplotlib灵活性最高,但代码相对繁琐,适合需要深度定制的场景。

如果你的核心需求是书籍中的极简示例代码,Seaborn两种方案都能达标;如果习惯声明式可视化逻辑,plotnine在可读性和简洁性上确实更有优势。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:04:54