我公司生产的使用Python Matplotlib一个非常简单的饼图,我想编辑我的标签的对齐方式。 我用\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()
有任何想法吗?
你可以通过文本属性的字典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个标签的位置听起来像一个坏的时间给我。