Я пытаюсь адаптировать следующую стратегию (взятую из here), чтобы отрегулировать размеры стержней в Matplotlib barplotsМодифицирования бар ширина и бар-позиция в Matplotlib штрихового участке (зацикливание по контейнерам)
# Iterate over bars
for container in ax.containers:
# Each bar has a Rectangle element as child
for i,child in enumerate(container.get_children()):
# Reset the lower left point of each bar so that bar is centered
child.set_y(child.get_y()- 0.125 + 0.5-hs[i]/2)
# Attribute height to each Recatangle according to country's size
plt.setp(child, height=hs[i])
, но они столкнулись с необычным поведением при использовании этого графика на основе двух столбцов DataFrame. Соответствующая часть кода практически идентична:
for container in axes.containers:
for size, child in zip(sizes, container.get_children()):
child.set_x(child.get_x()- 0.50 + 0.5-size/2)
plt.setp(child, width=size)
эффект, который я получаю, что размер ширины брусков (я использую в в штриховом графике, не HBAR) изменяется по назначению , но повторное центрирование применяется только к столбцам, которые соответствуют второму столбцу DataFrame (я их поменял, чтобы проверить), что соответствует более светлому синему на рисунке ниже.
Я не совсем понимаю, как это могло произойти, так как изменения, как представляется, применяются в рамках одного и того же цикла. Мне также трудно справиться с проблемами, поскольку в моем случае внешняя петля проходит через два контейнера, а внутренний цикл проходит через столько же детей, сколько и баров (и это для каждого контейнера).
Как я могу начать поиск и устранение неисправностей? И как я мог узнать, что я на самом деле зацикливаюсь? (Я знаю, что каждый ребенок представляет собой прямоугольник-объект, но это еще не сказать мне разницу между прямоугольниками в обоих контейнерах)