下面代码模拟了一个分布,并绘制了一个堆叠直方图
import numpy as np
import matplotlib.pyplot as plt
f1f2=[(i**6-int(i**6))/5 for i in np.random.exponential(0.8, size=100)]
widz=[i*(1/max(f1f2)) for i in f1f2]
pos=[i for i in range(100)]
f1=[np.random.uniform()*i for i in f1f2]
f2=[s-i for s,i in zip(f1f2,f1)]
fig = plt.figure(figsize=(20,2), constrained_layout=False)
ax = fig.add_gridspec(nrows=1, ncols=1, hspace=0).subplots(sharex=True)
ax.bar(pos, f1,
color="red",
edgecolor="none",width=widz)
ax.bar(pos, f2,
bottom=f1,
color="blue",
edgecolor="none",width=widz)
结果如下:
我想完全相同的宽度为每个酒吧(成比例的总和,2个价值观),但没有空间之间的每个酒吧。所以x轴将难以阅读...是的。
1条答案
按热度按时间iyfjxgzm1#
我想完全相同的宽度为每个酒吧(成比例的总和2值),但没有空间之间的每个酒吧。
如果我理解正确的话,设置每个条形的位置,使其落在前一个条形的宽度之后,应该可以达到您的目的。
特别是:
用这种方法修改
pos
变量并将对齐模式设置为"edge"(bar()
调用中的align="edge"
),应该会得到下图。正如@Tranbi所指出的,轴
xticks
现在的范围从0
到sum(widz)
,如果需要,可以重新标记xticks
以保持原来的[0,100]
范围。虽然,正如你提到的,"x轴将很难读懂"。一些刻度标签可能会重叠。