我正在尝试调整以下策略(取自here)来调整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的第二列(我已交换它们进行检查),这对应于下图中较浅的蓝色。
我不太清楚这是怎么发生的,因为这两个变化似乎都是作为同一循环的一部分应用的。我也发现很难排除故障,因为在我的情况下,外循环通过两个容器,内循环通过尽可能多的孩子和每个容器(和每个容器的这个)。
我该如何开始排除故障?我怎么能找出我实际上正在循环的东西? (我知道每个孩子都是一个矩形对象,但这还没告诉我两个容器中矩形的区别)