饼图标签的Matplotlib中心对齐方式

时间:2016-03-24 15:34:05

标签: python matplotlib charts labels

我使用Matplotlib在Python中制作了一个非常简单的饼图,我想编辑标签的对齐方式。我在标签中使用了\n来分割线条,因为标签对于一条线来说太长了。但正如您从“饼图图像”图片中可以看到的那样,目前这是一种奇怪的对齐方式。我真的想让它居中对齐。

对于Matplotlib中的其他图表/图表类型,有一个名为align的参数,您可以将其设置为center,但plt.pie(...)似乎没有此属性。

这是我的代码:

import matplotlib.pyplot as plt
k = [7,15]
labels = 'Strongly and Mostly \n Agree', 'Strongly/Mostly Disagree \n  and In the Middle'
plt.pie(k, labels= labels)
plt.show()

enter image description here

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您可以通过plt.pie参数将文本属性字典传递给textprops。例如:

plt.pie(k, labels=labels, textprops={'weight': 'bold'})

但是,如果您尝试指定horizontalalignment属性,则会收到错误消息,说明您提供了两次该参数。显然没有,但是matplotlib将它的硬编码值和你的值传递给了一些内部函数。

但这可能是一件好事。我看待它的方式,没有那么多的对齐混合,而是文本与馅饼的一致对齐。

回到你的问题

pie返回每个楔形的补丁和标签。因此,您可以在初次调用pie后循环浏览标签以修改其对齐方式。看起来像这样:

k = [7, 15]
labels = 'Strongly and Mostly\nAgree', 'Strongly/Mostly Disagree\nand In the Middle'
fig, ax = plt.subplots()
ax.set_aspect('equal')
wedges, labels = ax.pie(k, labels=labels, textprops={'weight': 'bold'})
for label in labels:
    label.set_horizontalalignment('center')

enter image description here

正如您所看到的,标签现在与楔形重叠,从而降低了易读性。

标签也有set_position方法(即label.set_position((x, y))),但重新计算饼图中 N 标签的位置对我来说听起来不错。