Matplotlib:如何绘制两个直方图的差异?

FaC*_*fee 1 python matplotlib histogram bar-chart

假设您有以下数据集:

a=[1, 2, 8, 9, 5, 6, 8, 5, 8, 7, 9, 3, 4, 8, 9, 5, 6, 8, 5, 8, 7, 9, 10]
b=[1, 8, 4, 1, 2, 4, 2, 3, 1, 4, 2, 5, 9, 8, 6, 4, 7, 6, 1, 2, 2, 3, 10]
Run Code Online (Sandbox Code Playgroud)

并说你生成他们的直方图:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(1,2,figsize=(16, 8))

plt.subplot(121)
plot1=plt.hist(a, bins=[0,1,2,3,4,5,6,7,8,9,10],
normed=True,edgecolor='k',linewidth=1.0,color='blue')
plt.title("a")

plt.subplot(122)
plot2=plt.hist(b, bins=[0,1,2,3,4,5,6,7,8,9,10],
normed=True,edgecolor='k',linewidth=1.0,color='green')
plt.title("b")

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

你如何制作一个具有相同箱子的条形图和高度两个直方图之间的差异?

如果您这样做:

 diff=plt.bar([1,2,3,4,5,6,7,8,9,10], 
             height=(plot1[0]-plot2[0]), edgecolor='black', 
             linewidth=1.2, color='red',width = 1) 
 plt.title("a-b")
Run Code Online (Sandbox Code Playgroud)

x轴上的值不与箱对齐.如何解决这个问题? 在此输入图像描述

小智 6

好吧,如果我正确理解你的问题,解决方案很简单 - 如果你设置差异的区间从0开始,如前两个直方图,并设置对齐边缘,它似乎运作良好.

diff=plt.bar([0,1,2,3,4,5,6,7,8,9], 
             height=(plot1[0]-plot2[0]), edgecolor='black', 
             linewidth=1.2, color='red',width = 1, align = 'edge') 
plt.title("a-b")
plt.show()
Run Code Online (Sandbox Code Playgroud)

看我的输出图