我使用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()
有什么想法吗?
答案 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')
正如您所看到的,标签现在与楔形重叠,从而降低了易读性。
标签也有set_position
方法(即label.set_position((x, y))
),但重新计算饼图中 N 标签的位置对我来说听起来不错。