Python 垂直的;“破碎的”;以阵列作为条形高度和颜色编码的条形图

Python 垂直的;“破碎的”;以阵列作为条形高度和颜色编码的条形图,python,matplotlib,bar-chart,histogram,color-coding,Python,Matplotlib,Bar Chart,Histogram,Color Coding,我正在尝试创建一个条形图,如下所示: x轴是重合命中的探测器数量(即多重性) 对于每个多重性,我有几个事件。y轴包含每个事件的平均脉冲高度。颜色应与具有所示脉冲高度且在具有相应多重性的事件中出现的点击数相对应 我有一本字典,它把多重数作为键,把平均脉冲高度数组作为值 averages = {2 : [...], 3 : [...], 4 : [...], 5 : [...], 6 : [...],} for key in ave

我正在尝试创建一个条形图,如下所示:

x轴是重合命中的探测器数量(即多重性) 对于每个多重性,我有几个事件。y轴包含每个事件的平均脉冲高度。颜色应与具有所示脉冲高度且在具有相应多重性的事件中出现的点击数相对应

我有一本字典,它把多重数作为键,把平均脉冲高度数组作为值

averages = {2 : [...],
        3 : [...],
        4 : [...],
        5 : [...],
        6 : [...],}

for key in averages:
plt.bar(key,averages[key] ,width = 0.8)
我只知道如何制作简单的条形图,如下所示:


有人能告诉我如何使这些条“断开”以显示所有脉冲高度并添加颜色编码吗?

不完全清楚,但我想你想要这样的东西

导入seaborn作为sns
从scipy导入统计信息
将matplotlib导入为mpl
将matplotlib.pyplot作为plt导入
#创建一些与现有数据大致相同的假数据
tips=sns.load_数据集(“tips”)
权重=stats.gaussian_kde(tips[“total_bill”])(tips[“total_bill”])
tips=tips.样本(分数=50,重量=重量,替换=真)
天数=[]
段=[]
计数=[]
对于天,小费[“总账单”]中的x。分组方式(小费[“天]):
天。附加(天)
segments.append(np.sort(x.unique()))
counts.append(x.value\u counts().sort\u index())
#从计数映射到颜色
norm=mpl.colors.Normalize(0,np.concatenate(counts).max())
颜色=[mpl.cm.viridis(norm(c))表示c的计数]
f、 ax=plt.子批次()
#画每一条水平线
events=ax.eventplot(分段,颜色=颜色,方向=“垂直”,zorder=.5)
事件[0]。设置标准(标准)
f、 颜色栏(事件[0])
#将每个x位置的平均值/标准值相加
sns.pointplot(数据=提示,x=“天”,y=“总账单”,ci=“sd”,订单=天,连接=假,颜色=.1”)


我的问题是需要每个水平线来表示每个数据值,但是如果您对直方图感到满意,那么这是seaborn(>=0.11)中的两个函数调用

sns.histplot(
数据=小费,x=“天”,y=“账单总额”,
离散=(真,假),binwidth=(1.5),
cmap=“viridis”,cbar=True,zorder=0.5,alpha=0.75,
)
点图(
数据=小费,x=“天”,y=“账单总额”,
ci=“sd”,订单=天,加入=假,颜色=“.1”,
)

这里有一个解决方案,它使用
imshow
生成列式“颜色直方图”:

将matplotlib导入为mpl
将matplotlib.pyplot作为plt导入
将numpy作为np导入
#创建虚拟数据
巧合=[2,3,4,5,6]
n_list=[10000,8000,6000,4000,2000]
mu_list=np.array([200300400500600])
比例=100
平均值={c:np.random.normal(loc=mu_list[i],scale=scale,size=n_list[i])
对于枚举中的i,c(巧合)}
#计算每列的直方图
箱子=np.linspace(0,1000,1000)
hist_img=np.数组([np.直方图(平均值[c],料仓=料仓)[0]
对于c(在巧合中)T
#创建标准化颜色贴图
#norm=mpl.colors.Normalize()
norm=mpl.colors.LogNorm(vmin=1,vmax=hist_img.max())
sm=mpl.cm.ScalarMappable(cmap='viridis',norm=norm)
#对img_hist使用colormap并使零透明
hist\u img2=sm.to\rgba(hist\u img,bytes=True)
hist_img2[hist_img==0,3]=0
#密谋
图,ax=plt.子批次()
cc=ax.imshow(hist_img2,aspect='auto',interpolation='none',origin='lower',
范围=[1.5,6.5,0,1000])
打印颜色条(sm)
平均值=[np.平均值(平均值[c]),适用于符合条件的c]
std=[np.std(平均值[c])表示c的重合度]
最大误差条(一致性,平均值,YER=std,ls='',c=k',倾覆=3,标签=std')
ax.图(一致性,平均值,ls='',标记='o',c='b',标签='mean')
ax.图例()

我不知道。我得去看看。+1这真的很有帮助。非常感谢!