我试图通过三个平台XBL,PSN和PC来绘制莱因哈特在各个级别的胜率。我希望条形图具有三个x值,每个平台一个。我在使用两个单独的列作为数据进行图形绘制时遇到了问题。
我尝试了以下方法:
df[(['Hero'] == 'Reinhardt') & (['Rank'] == 'All')].plot.bar(x='Platform', y='Win_rate')
这给出了错误:KeyError:False
df[.loc[df['Hero'] == 'Reinhardt' & df['Rank'] == 'All']].plot.bar(x='Platform', y='Win_rate')
哪个给出:TypeError:无法将类型为[bool]的标量的dtyped [object]数组进行比较
我希望出现三个条形图,其中x标签为PC,XBOX和PSN,y轴为winrates。抱歉,以前是否有人问过这个问题,但我似乎已死胡同。 以下是各列: Dataframe with all Reinhardt values, can't direct paste because of reputation
答案 0 :(得分:0)
我使用此代码生成了一些示例数据,请说明格式是否正确:
In[1]:
import numpy as np
import pandas as pd
hero = np.random.choice(['Ana', 'Reinhardt', 'Widow', 'Hanzo', 'Torb'], 30)
platform = np.random.choice(['XBL', 'PSN', 'PC'], 30)
winrate = np.random.rand(30) * 100
df = pd.DataFrame({'Hero': hero,
'Platform': platform,
'Winrate': winrate})
unique = df.groupby(['Platform', 'Hero']).agg({'Winrate': 'mean'}).reset_index()
unique.head()
Out[1]:
Platform Hero Winrate
0 PC Ana 33.721728
1 PC Hanzo 27.350393
2 PC Reinhardt 60.182229
3 PC Torb 71.929657
4 PC Widow 51.911960
最方便地按组绘制数据的方法是使用seaborn
,它建立在matplotlib的顶部(请参阅sns.barplot
)
In[2]: import seaborn as sns
sns.barplot(data=unique, x='Hero', y='Winrate', hue='Platform')