饼图标签的 Matplotlib 中心对齐
Matplotlib center alignment for pie chart labels
我使用 Matplotlib 在 Python 中制作了一个非常简单的饼图,我想编辑标签的对齐方式。我在标签中使用了 \n
来拆分行,因为标签对于一行来说太长了。但是正如您从名为 'pie chart image' 的图片中看到的那样,目前它是奇怪排列的混合体。我真的很想让它居中对齐。
对于Matplotlib中的其他chart/graph类型,有一个名为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()
有什么想法吗?
您可以通过 textprops
参数将文本属性字典传递给 plt.pie
。例如:
plt.pie(k, labels=labels, textprops={'weight': 'bold'})
但是,如果您尝试指定 horizontalalignment
属性,您将收到一条错误消息,指出您提供了该参数两次。显然 你 没有,但是 matplotlib 将它的硬编码值和你的值都传递给了一些内部函数。
但这可能是件好事。在我看来,并没有太多对齐方式的混合,而是文本与饼图的对齐方式一致。
回到你的问题
pie
returns 每个楔形的补丁和标签。因此,您可以在初次调用 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标签的位置听起来像对我来说很糟糕。
我使用 Matplotlib 在 Python 中制作了一个非常简单的饼图,我想编辑标签的对齐方式。我在标签中使用了 \n
来拆分行,因为标签对于一行来说太长了。但是正如您从名为 'pie chart image' 的图片中看到的那样,目前它是奇怪排列的混合体。我真的很想让它居中对齐。
对于Matplotlib中的其他chart/graph类型,有一个名为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()
有什么想法吗?
您可以通过 textprops
参数将文本属性字典传递给 plt.pie
。例如:
plt.pie(k, labels=labels, textprops={'weight': 'bold'})
但是,如果您尝试指定 horizontalalignment
属性,您将收到一条错误消息,指出您提供了该参数两次。显然 你 没有,但是 matplotlib 将它的硬编码值和你的值都传递给了一些内部函数。
但这可能是件好事。在我看来,并没有太多对齐方式的混合,而是文本与饼图的对齐方式一致。
回到你的问题
pie
returns 每个楔形的补丁和标签。因此,您可以在初次调用 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标签的位置听起来像对我来说很糟糕。