如何在DataFrame绘图的图例中显示symbol字段名称?
解决DataFrame绘图图例不显示Symbol的问题
嘿,我懂你遇到的麻烦了——把date设为索引后绘图,图例只显示列名(close、ave这些),但就是看不到对应的symbol,而且直接加label=symbol根本没用。这问题其实出在你没搞对plot()参数的作用,以及DataFrame的结构适配性上,我给你分两种常见情况说解决方案:
情况1:你的DataFrame是「长格式」(每行对应一个标的的单日数据)
比如你的数据结构是这样的:
| date | symbol | close | ave | upper | lower |
|---|---|---|---|---|---|
| 2024-01-01 | AAPL | 150 | 148 | 155 | 143 |
| 2024-01-02 | AAPL | 152 | 149 | 156 | 144 |
| 2024-01-01 | MSFT | 380 | 375 | 390 | 365 |
这种情况下,直接df.plot()只会把所有数值列(close、ave等)混在一起画,而且因为symbol是文本列,根本不会被纳入绘图逻辑。正确的做法是按symbol分组,手动给每组线条设置图例标签:
import matplotlib.pyplot as plt # 你已经做了这步,把date设为索引 df = df.set_index('date') # 先创建绘图画布和轴对象 fig, ax = plt.subplots() # 按symbol分组,逐个绘图并设置label for symbol_name, group_data in df.groupby('symbol'): # 先画close线,label直接用symbol名称 group_data['close'].plot(ax=ax, label=symbol_name) # 如果还要画ave、upper、lower,也可以分别设置带symbol的标签 group_data['ave'].plot(ax=ax, label=f"{symbol_name}_均线", linestyle='--') group_data['upper'].plot(ax=ax, label=f"{symbol_name}_上轨", linestyle=':') group_data['lower'].plot(ax=ax, label=f"{symbol_name}_下轨", linestyle=':') # 最后显示图例 ax.legend() plt.show()
情况2:你的DataFrame是「宽格式」(单标的多列数据)
如果你的数据里只有一个symbol,比如整表都是AAPL的数据,那你只需要把列名改成包含symbol的格式,这样plot()会自动用列名作为图例:
# 假设你的symbol变量是'AAPL',重命名所有数值列 df = df.rename(columns={ 'close': 'AAPL_收盘价', 'ave': 'AAPL_均线', 'upper': 'AAPL_上轨', 'lower': 'AAPL_下轨' }) # 直接绘图,图例就会显示带symbol的名称了 df.plot() plt.legend() plt.show()
为啥你之前的df.plot(label=symbol)没用?
因为plot()里的label参数是给整个坐标轴设置默认标签,不是给每个数据系列(也就是每一列)设置图例名称。每个系列的图例默认用的是列名,所以要么让列名带上symbol,要么分组手动指定label才行。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

