【问题标题】:Matplotlib center alignment for pie chart labels饼图标签的 Matplotlib 中心对齐
【发布时间】:2016-03-25 00:49:28
【问题描述】:

我使用 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()

有什么想法吗?

【问题讨论】:

    标签: python matplotlib charts labels


    【解决方案1】:

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

    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 个标签的位置对我来说听起来很糟糕。

    【讨论】:

    • 谢谢 - 这非常有用!我不介意只为两个标签设置位置,再次感谢 :)
    • 是否可以将horizontalalignment 作为参数传递给ax.pie?我正在使用pandas,它不会返回wedgeslabels;因此问题。
    • @tommy.carstensen 试一试会发生什么?
    • horizontalalignment 不是 DataFrame.plot.pie()Series.plot.pie() 的有效参数。
    • @tommy.carstensen 你把它打包到textprops 字典里了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    相关资源
    最近更新 更多