matplotlib中的barplot是否使用均值?

时间:2018-09-11 13:41:32

标签: python pandas matplotlib

我有一个数据集df

users  number   
user1   1          
user2   34       
user3   56      
user4   45      
user5   4
user1   3
user5   11
user1   3

在制作这样的地标时:

plt.bar(x['users'], x['number'].sort_values(ascending=False), color="blue")

在绘制过程中,是否要获取user列中每个number的平均值? 如果我希望number列中所有数字的总和以降序显示在条形图中,该怎么办?

我尝试过:

plt.bar(x['users'], x['number'].sum().sort_values(ascending=False), color="blue")

给出:

AttributeError: 'numpy.float64' object has no attribute 'sort_values'

代码:

import pandas as pd
df = pd.DataFrame({'number': [10,34,56,45,33],
'user': ['user1','user2','user3','user4','user1']})
#index=['user1','user2','user3','user4','user1'])
plt.bar(df['user'], df['number'], color="blue")

enter image description here

对于拥有很多价值的用户,它始终保持最大价值。

1 个答案:

答案 0 :(得分:1)

我不确定这是您想要的还是要首先为每个用户groupby的值,然后以降序排列总数。

x = x.sort_values('number',ascending=False)
plt.bar(range(len(x['users'])), x['number'], color="blue")
plt.xticks(range(len(x['users'])), x['users'])
plt.ylabel('Numbers')

输出

enter image description here

如果要绘制每个用户的平均值,请使用以下代码:

x1 = x.groupby('users').mean().reset_index()
plt.bar(range(len(x1)), x1['number'], color="blue")
plt.xticks(range(len(x1)), x1['users'])
plt.ylabel('Mean')

输出

enter image description here

如果您不对它进行排序或分组,该怎么办:显示所有条形,但是对于相同的x值,您看不到不同的条形,因为默认情况下alpha=1。我用alpha=0.2来强调我的观点。现在,您看到在user1处有两个条形图。

import pandas as pd
df = pd.DataFrame({'number': [10,34,56,45,51], 'user': 'user1','user2','user3','user4','user1']})
plt.bar(df['user'], df['number'], color="blue", linewidth =2, edgecolor='black' , alpha = 0.2)

输出

enter image description here