Как централизовать бары в matplotlib? - PullRequest
0 голосов
/ 01 мая 2020

Мой код:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

h=[p1,p2,p3,p4]
r=['page 1','page 2','page 3','page 4']
h
plt.barh(r, h, align ='edge')

Я хочу сделать симметричную диаграмму. Как я могу это сделать?

1 Ответ

0 голосов
/ 01 мая 2020

Вычитание каждой ширины из максимальной и деление на два, чтобы установить левую начальную точку стержней, привело бы к центрированным стержням. Numpy помогает в написании выражений кратко.

Штанга стандартно использует "липкие" края. Вертикальные полосы устойчиво стоят на основании y=0 вместо того, чтобы зависать в воздухе. Турники стандартно приклеиваются к основанию x=0. Установка use_sticky_edges для графика ax в значение False удаляет это значение по умолчанию и помогает придать симметричный c аспект.

При желании метки также могут быть центрированы.

import numpy as np
import matplotlib.pyplot as plt

h = [12, 22, 19, 5]
r = ['page 1', 'page 2', 'page 3', 'page 4']
h = np.array(h)
plt.gca().use_sticky_edges = False
plt.barh(r, width=h, left=(h.max() - h) / 2, align='center', color='crimson')
for ri in r:
    plt.text(h.max() / 2, ri, ri, ha='center', va='center', color='white', size=16)
plt.yticks([]) # optionally remove standard y ticks and their labels
plt.show()

example plot

PS: Идея поместить x=0 в центр, это удвоить ширину и позволить столбцам начинаться с -h:

plt.barh(r, width=h*2, left=-h, align='center', color='crimson')
for ri in r:
    plt.text(x=0, y=ri, s=ri, ha='center', va='center', color='white', size=16)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...