如何在 matplotlib.pyplot 的饼图中删除左侧标签?
Matplotlib 是一种 Python 绘图库,可用于创建各种类型的图表,包括饼图。在绘制饼图时,通常需要标记每个扇形块的百分比或标签。但有时会出现左侧的标签过多,影响了饼图的美观度。这时候,我们就需要找到一种删除饼图左侧标签的方法。
方法一:只显示右侧标签
一种简单的方法是只显示右侧标签,而将左侧标签隐藏。可以通过 pie()
函数的 labels
和 autopct
参数来实现。
import matplotlib.pyplot as plt
labels = ['A', 'B', 'C', 'D', 'E']
sizes = [15, 30, 45, 5, 5]
fig, ax = plt.subplots()
ax.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
ax.axis('equal') # 保持饼图长宽比相等
plt.show()
可以看到,左侧的标签已经被隐藏了,只显示了右侧的百分比标签。
但这种方法不能完全删除左侧标签,只是将左侧的标签隐藏了而已。
方法二:设置文本颜色为透明
第二种方法是将左侧标签的文本颜色设置为透明,也就是完全透明。
import matplotlib.pyplot as plt
labels = ['A', 'B', 'C', 'D', 'E']
sizes = [15, 30, 45, 5, 5]
fig, ax = plt.subplots()
_, _, text = ax.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
ax.axis('equal') # 保持饼图长宽比相等
for t in text:
t.set_color('none') # 将文本颜色设置为透明
plt.show()
可以看到,左侧的标签已经被完全删除了,只留下了饼图和右侧的百分比标签。
方法三:使用 patches
属性
第三种方法是使用 patches
属性,手动删除左侧标签所在的 Patch
对象。ax.pie()
函数会返回一个元组,其中第一个元素是绘制的饼图 Patch
对象,第二个元素是对应的标签,第三个元素是对应的文本。我们可以通过操作这些对象来删除左侧的标签和文本。
import matplotlib.pyplot as plt
labels = ['A', 'B', 'C', 'D', 'E']
sizes = [15, 30, 45, 5, 5]
fig, ax = plt.subplots()
wedges, _, text = ax.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
ax.axis('equal') # 保持饼图长宽比相等
# 获取饼图对象宽度
wedge_width = wedges[0].get_width()
# 找到所有需要删除的 Patch 对象
invisible_wedges = [wedge for wedge in wedges if wedge.get_theta1() > 180]
# 删除需要删除的 Patch 对象
for invisible_wedge in invisible_wedges:
invisible_wedge.set_visible(False)
# 调整右侧文本和线条的位置
for t in text:
x, y = t.get_position()
if x < 0:
t.set_position((x+ wedge_width, y))
t.set_horizontalalignment('right')
plt.show()
可以看到,左侧的标签已经被完全删除了,只留下了饼图和右侧的百分比标签。
结论
总结一下,我们可以通过以下三种方法来删除 matplotlib.pyplot 的饼图中的左侧标签:
- 只显示右侧标签,将左侧标签隐藏。
- 将左侧标签的文本颜色设置为透明。
- 使用
patches
属性,手动删除左侧标签所在的Patch
对象。
在实际应用中,可以根据需求选择合适的方法来删除左侧标签,以达到更好的视觉效果。