Похоже, что нет возможности напрямую добавить закругленные углы к гистограмме. Но matplotlib предоставляет класс FancyBboxPatch
, демоверсия которого доступна здесь .
Итак, чтобы создать график, подобный показанному в вопросе, мы могли бы сначаласделать простую горизонтальную гистограмму:
import pandas as pd
import numpy as np
# make up some example data
np.random.seed(0)
df = pd.DataFrame(np.random.uniform(0,20, size=(4,4)))
df = df.div(df.sum(1), axis=0)
# plot a stacked horizontal bar chart
ax = df.plot.barh(stacked=True, width=0.98, legend=False)
ax.figure.set_size_inches(6,6)
Это дает следующий график:
Чтобы прямоугольники имелизакругленные углы мы могли бы пройти через каждый прямоугольник в ax.patches
и заменить его на FancyBboxPatch
. Этот новый модный патч с закругленными углами копирует местоположение и цвет старого патча, так что нам не нужно беспокоиться о размещении.
from matplotlib.patches import FancyBboxPatch
ax = df.plot.barh(stacked=True, width=1, legend=False)
ax.figure.set_size_inches(6,6)
new_patches = []
for patch in reversed(ax.patches):
bb = patch.get_bbox()
color=patch.get_facecolor()
p_bbox = FancyBboxPatch((bb.xmin, bb.ymin),
abs(bb.width), abs(bb.height),
boxstyle="round,pad=-0.0040,rounding_size=0.015",
ec="none", fc=color,
mutation_aspect=4
)
patch.remove()
new_patches.append(p_bbox)
for patch in new_patches:
ax.add_patch(patch)
Это то, что мы получаем тогда:
Я дал ящикам отрицательный отступ, так что между ними есть промежуткибары. Числа немного чёрной магии. Понятия не имею, для чего предназначен аппарат rounding_size
и pad
. mutation_aspect
показано в последнем демонстрационном примере, здесь я установил его на 4, потому что диапазон y
равен приблизительно 4, а диапазон x
равен приблизительно 1.