基于DataFrame绘制多线图:按NFL球队拆分展示年度薪资变化
多折线按球队拆分绘制方案
你之前只输出单条折线的原因是直接对长格式数据集指定x、y绘图时,pandas默认将所有数据点按x轴顺序串联,没有按球队字段做分组拆分,两种常用实现方案如下:
方案1:仅用pandas内置plot功能实现
无需额外安装第三方绘图库,只需要将长表转为宽表即可:
- 先预处理薪资字段:去除
$符号后转为数值类型,否则字符串格式无法正常绘制数值轴 - 通过
pivot方法将数据集转为以年份为索引、球队为列、薪资为值的宽格式 - 直接调用
plot方法,pandas会自动为每一列(每支球队)生成独立折线
代码示例:
import pandas as pd # 此处替换为你自己的数据集读取代码,示例仅为模拟数据 df = pd.DataFrame({ "年份": [2015,2015,2015,2016,2016,2016], "球队": ["迈阿密", "丹佛", "洛杉矶", "迈阿密", "丹佛", "洛杉矶"], "薪资": ["$100", "$150", "$125", "$125", "$100", "$100"] }) # 薪资字段转数值 df["薪资"] = df["薪资"].str.replace("$", "", regex=False).astype(int) # 长表转宽表 df_wide = df.pivot(index="年份", columns="球队", values="薪资") # 绘图 df_wide.plot(kind="line", figsize=(10, 6), xlabel="年份", ylabel="总薪资", title="NFL各球队年度总薪资走势")
方案2:使用seaborn实现(无需转表,配置更灵活)
如果可以引入seaborn库,无需转换表结构,直接通过hue参数指定分组维度即可:
import pandas as pd import seaborn as sns from matplotlib import pyplot as plt # 薪资预处理逻辑和方案1一致 df["薪资"] = df["薪资"].str.replace("$", "", regex=False).astype(int) # 直接绘图,hue参数按球队拆分折线 plt.figure(figsize=(10, 6)) sns.lineplot(data=df, x="年份", y="薪资", hue="球队", marker="o") plt.title("NFL各球队年度总薪资走势") plt.xlabel("年份") plt.ylabel("总薪资") plt.show()
内容的提问来源于stack exchange,提问作者Christian Fett
相关产品推荐
相关产品推荐

