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

使用DataFrame绘制散点图时图例仅显示首个项的问题求助

解决Pandas散点图图例仅显示第一个标签的问题

问题原因

你用df1.plot(kind='scatter')时,Pandas会把所有数据点当作单个绘图系列处理。当你给plt.legend()传入10个标签时,只有第一个标签能匹配这个单一系列,剩余标签没有对应的绘图对象,因此不会显示在图例中。

解决方法

推荐用Matplotlib原生的scatter函数,循环绘制每个球队的数据点,让每个球队对应独立的绘图系列,这样图例就能正常显示所有标签。

假设你的CSV文件里有一列名为Team(存储球队名称),修改后的代码如下:

import pandas as pd 
import matplotlib.pyplot as plt

df1 = pd.read_csv(r'F:\anoch\IPproject\FSTS\teams.csv')

# 定义球队列表和对应颜色
teams = ['Manchester City','Bayern Muchen','Real Madrid','Internazionale','Liverpool','Arsenal','FC Barcelona','Atletico Madrid','PSG','RB Leipzig']
colors = ['red', 'green', 'blue', 'yellow','black','purple','aquamarine','grey','tan','khaki']

# 逐个绘制每个球队的散点
for team, color in zip(teams, colors):
    # 筛选当前球队的数据
    team_data = df1[df1['Team'] == team]
    plt.scatter(team_data['GOALS/90min'], team_data['xG'], color=color, label=team)

# 设置图例和坐标轴标签
plt.legend(bbox_to_anchor=(-0.1, 0.75))
plt.xlabel('GOALS/90min')
plt.ylabel('xG')
plt.show()

补充说明

如果你的CSV每行对应一个球队,且没有单独的Team列,也可以直接按索引循环取数据:

for idx, (team, color) in enumerate(zip(teams, colors)):
    row = df1.iloc[idx]
    plt.scatter(row['GOALS/90min'], row['xG'], color=color, label=team)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:15:21