我想将多个数据集放在一个条形图上,并防止较小的条形图被较大的条形图遮挡,我不想抵消它们。例如,
栏(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 的关键字参数。
