热线电话:13121318867

登录
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.0000
1
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子