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

如何用FacetGrid绘制东西部Top5 C位NBA球员得分柱状图

用Seaborn FacetGrid实现东西部C位Top5得分柱状图对比

首先需要导入seaborn库(FacetGrid是seaborn的核心组件),然后优化数据处理逻辑,再通过FacetGrid实现分面可视化:

步骤1:修正原代码错误并准备数据

原代码里matploltlib为拼写错误,需改为matplotlib;同时用更简洁的方式筛选并提取东西部C位的Top5球员:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns  # 导入seaborn库

# 生成模拟数据
fake_data = {}
for i in range(100):
    name = str(float(np.random.rand(1)))
    pos = 'C' if np.random.rand(1) > 0.3 else 'D'
    pts = float(np.random.randint(0,2000,1))
    conf = 'East' if np.random.rand(1) > 0.5 else 'West'
    fake_data[name] = {'pos':pos,'pts':pts,'conf':conf}
df = pd.DataFrame(fake_data).T

# 筛选C位球员,按东西部分组后取每组得分Top5
df_c_top5 = df[df['pos'] == 'C'].groupby('conf').apply(
    lambda x: x.sort_values('pts', ascending=False).head(5)
).reset_index(drop=True)

步骤2:用FacetGrid绘制分面柱状图

通过FacetGrid按conf(东西部)分面,然后映射柱状图到每个子图:

# 创建FacetGrid对象,按conf列分面,1行2列,设置画布尺寸
g = sns.FacetGrid(df_c_top5, col='conf', height=6, aspect=0.8)

# 映射柱状图:x轴为球员name,y轴为得分pts,指定排序顺序
g.map(sns.barplot, 'name', 'pts', order=df_c_top5.groupby('conf')['name'].apply(list))

# 设置全局标题和子图标题
g.figure.suptitle('Top scorers of position C by conf', y=1.02)  # y参数调整标题位置避免重叠
g.set_titles(col_template='{col_name}')

# 旋转x轴标签避免文字重叠
g.set_xticklabels(rotation=45)

plt.show()

关键说明

  • groupby+apply的方式可一次性获取东西部的Top5数据,比分开处理更简洁;
  • FacetGrid.map()会自动为每个分面(东/西部)绘制对应柱状图;
  • order参数确保每个子图的球员按得分从高到低排序,和原matplotlib实现逻辑一致;
  • 通过set_titles快速设置子图标题,suptitle设置全局标题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:20:35