2019-01-25
阅读量:
972
使用groupby后,从pandas图中删除“None”文本
我有以下数据:
d_data = {"Name":["Jean","Luis", "Ana", "Ana", "Jean", "Luis","Ana", "Ana", "Luis","Ana","Luis" ],
"Money":[100, 2220, 333, 3342, 4423, 43, 5454, 4455, 421, 996,3102],
"Type":["Cash","Cash","Cash","Cash","Digital","Cash","Digital","Cash","Cash","Digital","Digital"]}
为此我想为每个人的钱类型制作一个条形图。为此,我正在使用此代码:
df= pd.DataFrame(d_data)
df.groupby(["Name","Type"]).sum().unstack().plot(kind='bar', stacked=True)
产生以下:
从这个图中我想删除图例中的双重标签:“无”和只保留资金类型:“数字”和“现金”
这是解决问题的一种方法。ax.get_legend_handles_labels()
返回轴对象的图例句柄和标签。如果打印labels
,将看到None, Type
未打印。
解决办法:
现在,可以剥离标签以仅获取“现金”和“数字”,并使用列表理解来存储它们labels_new
。
因此,当再次使用时设置图例时plt.legend(handles, labels_new)
,只能获得所需的图例。可能还有其他直接方式,但以下解决方案也有效。
fig, ax = plt.subplots()
d_data = {"Name":["Jean","Luis", "Ana", "Ana", "Jean", "Luis","Ana", "Ana", "Luis","Ana","Luis" ],
"Money":[100, 2220, 333, 3342, 4423, 43, 5454, 4455, 421, 996,3102],
"Type":["Cash","Cash","Cash","Cash","Digital","Cash","Digital","Cash","Cash","Digital","Digital"]}
df= pd.DataFrame(d_data)
df.groupby(["Name","Type"]).sum().unstack().plot(kind='bar', stacked=True, ax=ax)
handles, labels = ax.get_legend_handles_labels()
labels_new = [label.strip('()').split(',')[1] for label in labels]
plt.legend(handles, labels_new)






评论(0)


暂无数据
推荐帖子
0条评论
0条评论
0条评论