gpt4 book ai didi

python - 在 matplotlib 中,如何绘制多个数据集的条形图以将最小的条放在前面?

转载 作者:太空宇宙 更新时间:2023-11-04 07:25:55 26 4
gpt4 key购买 nike

我想将多个数据集放在一个条形图上,并防止较小的条形图被较大的条形图遮挡,我不想抵消它们。例如,

栏(0, 1.)

栏(0, 2.)

只显示高度为 2.0 的第二条,第一条隐藏。有没有办法让 matplotlib 在顶部绘制最小的条形图?注意我不想要堆叠条形图或在 x 方向上偏移条形图。

我可以按条形高度对所有数据集中的所有数据进行排序,并按此顺序单独绘制每个条形图,但我更愿意单独绘制每个条形图而不是依次绘制每个数据集有人知道这样做的方法吗?

非常感谢

最佳答案

我知道这是一个老问题,但我出于自己的目的遇到了它,因为它看起来像是我会一遍又一遍地做的事情,所以我为 hist 函数组合了一个包装器(这就是我的将使用;对 bar 的修改应该是微不足道的):

from matplotlib import pyplot as mpl
from numpy import argsort, linspace

def hist_sorted(*args, **kwargs):
all_ns = []
all_patches = []

labels = kwargs.pop('labels', None)
if not labels:
labels = ['data %d' % (i+1) for i in range(len(args))]
elif len(labels) != len(args):
raise ValueError('length of labels not equal to length of data')

bins = kwargs.pop('bins', linspace(min(min(a) for a in args),
max(max(a) for a in args),
num = 11))

for data, label in zip(args, labels):
ns, bins, patches = mpl.hist(data, bins=bins, label=label, **kwargs)
all_ns.append(ns)
all_patches.append(patches)
z_orders = -argsort(all_ns, axis=0)

for zrow, patchrow in zip(z_orders, all_patches):
assert len(zrow) == len(patchrow)
for z_val, patch in zip(zrow, patchrow):
patch.set_zorder(z_val)

return all_ns, bins, all_patches

这将数据集作为匿名参数,将任何标签作为关键字参数(用于图例),以及任何其他可用于 hist 的关键字参数。

关于python - 在 matplotlib 中,如何绘制多个数据集的条形图以将最小的条放在前面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2194299/

26 4 0