标签alignmnet饼图/ matplotlib 2.1.0+

时间:2019-01-30 13:29:49

标签: matplotlib label alignment pie-chart labeling

我对pie-chart标签对齐方式有疑问。 我想在饼图的外部放置标签,并在每个楔形的中心对齐。 根据文档页面,使用“ labeldistance”参数可以将标签放置在饼图之外,而应该使用"ha" & "va"参数居中。但是,这两个选项(ha和va)似乎不适用于Matplotlib v2.1.0+。 1)在此示例中(请参见下文),您可以看到“ 汽车 ”标签未正确居中,偏心了一点。

import matplotlib.pyplot as plt
figure = plt.figure()
axes = figure.add_subplot(111)
axes.set_aspect(1)  # circular pie
y = [1,2,3, 4,8,16,18]
label = ['car','domino', 'romancical','testing1', 'thisisthelonglabel', 
         'fffffffffffffffffffffffffffffffffffffffffff', 'as']
wedges, texts = plt.pie(y, 
                        radius=1.2, 
                        labels=label, 
                        labeldistance=1.0, 
                        rotatelabels =True,
                        startangle = 10,
                        wedgeprops = {"linewidth": 0.7, 
                                      "edgecolor": "white"},
                        textprops = dict(ha="center", 
                                          va="center")) # doesn't work 
plt.show()

enter image description here

我添加了以下几行以强制标签居中,该标签可以工作,但是禁用了“ labeldistance”参数。这样,我所有的标签都正确地居中了,因为我希望标签与圆形图重叠。

    wedges, texts = plt.pie(y, 
                            radius=1.2, 
                            labels=label, 
                            labeldistance=1.0, 
                            rotatelabels =True,
                            startangle = 10,
                            wedgeprops = {"linewidth": 0.7, 
                                          "edgecolor": "white"},
                            textprops = dict(ha="center", 
                                              va="center"))
for t in texts:
       t.set_horizontalalignment("center")
       t.set_verticalalignment("center")
 plt.show()    

enter image description here

所以我的问题是,“ ha”和“ va”选项是否对其他用户有效? 有人建议使用labeldistance.set_horizontalalignment("center")时是否保留“ set_verticalalignment("center")”吗?

谢谢。

1 个答案:

答案 0 :(得分:3)

在matplotlib 3.0.2和2.1.2中,使用

textprops = dict(va="center", rotation_mode = 'anchor')

(和labeldistance=1.05)的结果是

enter image description here

请注意,这里省略了ha="center"选项,因为最好根据标签位于圆的左侧还是右侧来自动设置水平对齐方式。

有关rotation_mode的说明,请参见this questionthis question