python - 如何从多个条形图中的图例中删除一个条形标签
问题描述
我在条形图中有两个条形图。但是,我只想显示图例中的一个标签。例子:
In [190]: import pandas as pd
In [191]: import matplotlib.pyplot as plt
In [192]: import seaborn as sns
In [193]: from matplotlib.colors import ListedColormap
In [194]: my_cmap = ListedColormap(sns.color_palette("GnBu_d", 4).as_hex())
In [195]: df1 = pd.DataFrame([[200, 0.0, 0.0, 0.0], [0.0, 120, 60, 20]], columns=['Total','A', 'B', 'C'])
In [196]: ax = df1.plot(colormap=my_cmap, title='Allocation per bucket', kind='bar', stacked=True, alpha=0.8)
In [197]: ax.title.set_size(30)
In [198]: ax.set_ylabel('Value', fontsize=15)
Out[198]: Text(0,0.5,'Value')
In [199]: ax.set_xticklabels(['Total', 'Split'])
Out[199]: [Text(0,0,'Total'), Text(0,0,'Split')]
In [200]: box = ax.get_position()
In [201]: ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])
In [202]: ax.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=13, prop={'size': 13})
Out[202]: <matplotlib.legend.Legend at 0x7f1ce0b4e050>
In [203]: plt.xticks(rotation=0)
Out[203]: (array([0, 1]), <a list of 2 Text xticklabel objects>)
In [204]: plt.show()
如您所见,这导致以下图片
我想Total
从图例中删除,只显示A
,B
和C
. 我如何实现这一目标?
解决方案
另一个答案只是将前 3 个图例标签重命名为['A','B','C']
而不实际删除“Total”(并且不显示最后一个图例条目)。这可以通过查看图例中的颜色来看出。“Total”的颜色仍然是图例中的第一个条目,但它已重命名为“A”。我不认为这是想要的结果。
您可以使用获取图例句柄和标签的列表,ax.get_legend_handles_labels()
然后将结果切片以不包括第一个条目:
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles=handles[1:], labels=labels[1:],
loc='center left', bbox_to_anchor=(1, 0.5), fontsize=13, prop={'size': 13})
这使:
推荐阅读
- python - Psychopy如何解决TypeError:*:'NoneType'和'int'不支持的操作数类型
- flutter - 在颤动中向http响应添加多个标头
- javascript - 有没有办法为 div 创建波浪形边框半径,以及使用图像背景的最佳方法是什么
- java - 如何使用 com.google.android.material 对象和更改按钮背景
- c# - 如何在 C# 中关闭这个循环二维数组?
- bash - 使用读取的输出作为变量时的语法错误
- python - 使用 Python 绘制 3D 图
- android - Android Volley:ImageRequest 中的错误 URL
- linux - 为什么我的信用没有被传递到我的 nginx.conf 中?
- flutter - 使用 ChangeNotifier 开发应用程序的 Flutter MVVM 设计模式