Метки круговой диаграммы alignmnet / matplotlib 2.1.0+ - PullRequest
0 голосов
/ 30 января 2019

У меня вопрос по поводу выравнивания меток pie-chart.Я хотел бы иметь метки вне круговой диаграммы и по центру каждого клина.Согласно странице документации, параметр "labeldistance" позволяет размещать метки вне круговой диаграммы, а параметры "ha" & "va" должны находиться в центре.Однако эти два параметра (ha & va), похоже, не работают на Matplotlib v2.1.0+.1) В этом примере (см. Ниже) вы можете видеть, что метка " car " не отцентрирована должным образом, она немного смещена от центра.

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 голосов
/ 30 января 2019

В 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 см., Например, этот вопрос или этот вопрос .

...