【发布时间】:2022-01-17 08:31:38
【问题描述】:
我正在尝试从 2 个列表创建堆栈条形图:
counts_start = [tensor(0.),
tensor(0.),
tensor(0.0050),
tensor(0.0100),
tensor(0.2833),
tensor(0.8250),
tensor(0.8917),
tensor(1.),
tensor(1.),
tensor(1.)]
counts_end = [tensor(0.1350),
tensor(0.1467),
tensor(0.1517),
tensor(0.2233),
tensor(0.2350),
tensor(0.2417),
tensor(0.4100),
tensor(0.4200),
tensor(0.4483),
tensor(0.4600)]
在this 之后,我了解到我需要每个列表的bottom 是之前所有列表的总和,所以我得到了这个代码:
counts_start = [torch.tensor(0.),
torch.tensor(0.),
torch.tensor(0.0050),
torch.tensor(0.0100),
torch.tensor(0.2833),
torch.tensor(0.8250),
torch.tensor(0.8917),
torch.tensor(1.),
torch.tensor(1.),
torch.tensor(1.)]
plt.bar(indices_end,counts_end, color='r')
counts_end = [torch.tensor(0.1350),
torch.tensor(0.1467),
torch.tensor(0.1517),
torch.tensor(0.2233),
torch.tensor(0.2350),
torch.tensor(0.2417),
torch.tensor(0.4100),
torch.tensor(0.4200),
torch.tensor(0.4483),
torch.tensor(0.4600)]
indices_start = range(len(counts_start))
plt.bar(indices_start,counts_start, bottom=counts_end)
plt.show()
哪些输出
每个列表都有一个概率值,因此最大值为 1,最小值为 0,这是我需要条形图开始和结束但无法正常工作的地方。另请注意,第三列和第四列的顶部是蓝色,这使得蓝色看起来具有更高的价值(实际上并非如此)。
我还尝试用输出的plt.bar(indices_start,[a_i - b_i for a_i, b_i in zip(counts_start, counts_end)], bottom=counts_end) 替换第二个plt.bar 行
这几乎是正确的(最大值为 1),除了前几列的颜色错误(我认为这是因为负值)。
为了澄清,我希望 2 个列表之间的每一列的最大值是该列的最大值。如果counts_start 列表中有较高的值,则蓝色应在其值的顶部(例如 0.8917),而较小的值应为其值的最大值(例如 0.4100)。所以它看起来像一列,红色为 0-0.4100,蓝色为 0.4100-0.8917。但是,如果counts_end 列表中有更高的值(例如 0.1517),则该列的顶部应为红色,该列的顶部为 0.1517,蓝色应为对应的值(例如 0.0050) .它看起来像一列,蓝色为 0-0.0050,红色为 0.0050-0.1517。
【问题讨论】:
标签: python matplotlib bar-chart