Python 比较直方图中的两个向量

Python 比较直方图中的两个向量,python,matplotlib,vector,histogram,Python,Matplotlib,Vector,Histogram,例如,我有两个向量 price1 = [28688, 28241, 30091] price2 =[27285, 29924, 35291] 我需要放在一个柱状图中,以便可视化差异并逐个元素进行比较。我试过的是 ind = np.arange(N) width = 0.2 a1 = plt.bar(ind, price1, width, color='black') b1 = plt.bar(ind, price2, width, color='red') 但是生成的直方

例如,我有两个向量

price1 = [28688, 28241, 30091]  
price2 =[27285, 29924, 35291]   
我需要放在一个柱状图中,以便可视化差异并逐个元素进行比较。我试过的是

ind = np.arange(N)
width = 0.2     
a1 = plt.bar(ind, price1, width, color='black')
b1 = plt.bar(ind, price2, width, color='red')
但是生成的直方图有一个问题:如果price1的一个元素(在本例中是最后两个)小于price2的相应元素,在图中我看不到它的相对条,而如果它大于则可以。我希望在每种情况下都能看到这两个值

另外,由于我在同一个图中有几对向量要比较,我不能简单地将两个条并排放置,为了避免混淆,我希望每个条有两个值


编辑:修复代码缩进。将变量名从price0,price1更改为price1,pirce2。

我认为您需要检查每个元素并更改绘图顺序

import numpy as np
import matplotlib.pyplot as plt

N = 3

price1 = [28688, 28241, 30091]
price2 =[27285, 29924, 35291]

ind = np.arange(N)
width = 0.2
bar_handlers_a = []
bar_handlers_b = []
for i, p1, p2 in zip(ind, price1, price2):
    if p1 < p2:
        b1 = plt.bar(i, p2, width, color='red')
        a1 = plt.bar(i, p1, width, color='black')
    else:
        a1 = plt.bar(i, p1, width, color='black')
        b1 = plt.bar(i, p2, width, color='red')

    bar_handlers_a.append(a1)
    bar_handlers_b.append(b1)

plt.show()
将numpy导入为np
将matplotlib.pyplot作为plt导入
N=3
价格1=[28688214130091]
价格2=[272852992435291]
ind=np.arange(N)
宽度=0.2
条形图\u处理器\u a=[]
bar_handlers_b=[]
对于zip中的i、p1、p2(ind、price1、price2):
如果p1
为了在前面有最小的条,您可以对数据进行排序。将它放入一个列数组中,这非常容易。然后,您可以在排序的数组中循环,根据其高度绘制条形图-从背景中的最高点开始。可以根据参数排序数组和ListedColormap进行着色

import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np

price1 = [28688, 28241, 30091]
price2 = [27285, 29924, 35291]   
prices = np.c_[price1,price2]

asort = np.argsort(prices,axis=1)
sort = np.sort(prices,axis=1)

cmap=matplotlib.colors.ListedColormap(["black", "red"])
ind = np.arange(prices.shape[0])
width = 0.2 

for i in range(prices.shape[1]-1,-1,-1):
    plt.bar(ind, sort[:,i], width, color=cmap(asort[:,i]))    

plt.show()

好的是,这很容易扩展到更多的价格清单;我们只需要将另一个列表添加到数组中,并将另一种颜色添加到colormap中

import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np

price1 = [28688, 28241, 30091]
price2 = [27285, 29924, 35291]
price3 = [26000, 29000, 36000]
prices = np.c_[price1,price2,price3]

asort = np.argsort(prices,axis=1)
sort = np.sort(prices,axis=1)

cmap=matplotlib.colors.ListedColormap(["black", "red", "C0"])
ind = np.arange(prices.shape[0])
width = 0.2 

for i in range(prices.shape[1]-1,-1,-1):
    plt.bar(ind, sort[:,i], width, color=cmap(asort[:,i]))    

plt.show()