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()