gpt4 book ai didi

python - 修改 matplotlib bar-plot 中的条形宽度和条形位置(循环容器)

转载 作者:太空宇宙 更新时间:2023-11-03 17:05:22 24 4
gpt4 key购买 nike

我正在尝试采用以下策略(取自 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的第二列(我已经交换了它们来检查),它对应于下图中的浅蓝色。

enter image description here

我不太明白这是如何发生的,因为这两个更改似乎都是作为同一循环的一部分应用的。我还发现很难排除故障,因为在我的情况下,外循环经过两个容器,而内循环经过与条形一样多的子级(每个容器都是如此)。

我该如何开始解决这个问题?我怎样才能知道我实际上正在循环什么? (我知道每个 child 都是一个矩形对象,但这还没有告诉我两个容器中的矩形之间的区别)

最佳答案

显然,在修改垂直条形图时,以下方法效果更好:

for container in axes.containers:
for i, child in enumerate(container.get_children()):
child.set_x(df.index[i] - sizes[i]/2)
plt.setp(child, width=sizes[i])

因此,与我采用的原始方法的主要区别在于,我没有获取容器的当前 x_position,而是重新使用 DataFrame 的索引将容器的 x_position 设置为索引减去其一半的位置新宽度。

enter image description here

关于python - 修改 matplotlib bar-plot 中的条形宽度和条形位置(循环容器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34643281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com