为什么第二个系列并不总是出现,如下所示?
场景1:
score_sim = (70, 80, 90)
score_feat = (10, 20, 30)
ind = np.arange(len(score_sim))
width = 0.35
p1 = plt.bar(ind, score_feat, width)
p2 = plt.bar(ind, score_sim, width)
p2没有显示?
场景2:
score_sim = (70, 80, 90)
score_feat = (100, 200, 300)
ind = np.arange(len(score_sim))
width = 0.35
p1 = plt.bar(ind, score_feat, width)
p2 = plt.bar(ind, score_sim, width)
那么,为什么只有第二个显示两个系列? 我希望蓝色系列在绿色系列之下。我该怎么做?
答案 0 :(得分:2)
在方案1中,score_feat
的条形图已正确绘制,但随后它们被score_sim
的值覆盖。
plt.bar有一个参数bottom
,它接受一个标量或一个数组,并指定一个条的垂直起始点。例如如果要在方案1上堆叠两个系列的条形,请使用第二个绘图命令:
p2 = plt.bar(ind, score_sim, width,bottom=score_feat)
答案 1 :(得分:1)
在场景1中,第二个图的条形图大于第一个图形的条形图。因此它们覆盖其他条形图。在方案2中,第二个绘图的条形小于第一个条形的条形,因此背景中的条形仍然可见。
请注意,两个图都没有显示“堆叠”条;所有栏都从y = 0开始。
为了让一个特定的情节显示在另一个面前,最简单的解决方案是情节是最后的,即在情景1中
p2 = plt.bar(ind, score_sim, width)
p1 = plt.bar(ind, score_feat, width)
除此之外,您可以使用zorder
在另一个前面绘制一个地块。在剧情前面的zorder越高越好。
p1 = plt.bar(ind, score_feat, width, zorder=4)
p2 = plt.bar(ind, score_sim, width, zorder=3)
# p1 will be shown in front of p2, even though it is later defined,
# because it has the larger zorder