pandas 如何在FacetGrid中将给定列前k行绘制为条形图(在matplotlib中使用编码虚拟数据和解决方案)

nbnkbykc  于 2023-02-02  发布在  其他
关注(0)|答案(1)|浏览(112)

任务是根据累积得分绘制NBA前5名球员的条形图,并比较东部和西部球员
我在matplotlib中实现了该解决方案,但我想知道如何使用FacetGrid来实现

import numpy as np
import matploltlib.pyplot as plt
import pandas as pd

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}
fake_data = pd.DataFrame(fake_data).T
fake_data

df = fake_data
df_pos_c_east = df[(df['pos'] == 'C') & (df['conf'] == 'East')].sort_values('pts',ascending=False)[:5]
df_pos_c_east_pts = df_pos_c_east['pts']
df_pos_c_west = df[(df['pos'] == 'C') & (df['conf'] == 'West')].sort_values('pts',ascending=False)[:5]
df_pos_c_west_pts = df_pos_c_west['pts']
fig,axs = plt.subplots(1,2,figsize=[6,6])
df_pos_c_east_pts.plot.bar(ax=axs[0])
df_pos_c_west_pts.plot.bar(ax=axs[1])
fig.suptitle('Top scorers of position C by conf')
axs[0].title.set_text('East')
axs[1].title.set_text('West')

这段代码创建了与我所拥有的数据相同的假数据,并使用matplotlib创建了我想要的图形。我如何使用FacetGrid创建类似的图形
任何帮助都将不胜感激!

tsm1rwdh

tsm1rwdh1#

我假设FacetGrid是seaborn的FacetGrid,如果是这样,你可以试着提取数据,并像这样绘图:

plot_data = (df.sort_values('pts', ascending=False).groupby('pos').head(5)
               .assign(rank=lambda x: x.groupby('pos').cumcount())
            )

g = sns.FacetGrid(data=plot_data, col='conf', row='pos' )
g.map(sns.barplot, 'rank','pts', order=range(5))

输出:

相关问题