Python中具有自定义宽度的条形图

Python中具有自定义宽度的条形图,python,pandas,matplotlib,data-visualization,Python,Pandas,Matplotlib,Data Visualization,我有这个数据帧df,它包含- Name Team Name Category Challenge Points Time A B 1 1ABC 50 2019-11-04 07:37:02 D B 2 2ACE

我有这个数据帧
df
,它包含-

Name       Team Name        Category       Challenge      Points            Time
 A            B               1              1ABC           50       2019-11-04 07:37:02        
 D            B               2              2ACE          150       2019-11-04 09:57:02
 X            P               4              4PQR          500       2019-11-05 08:45:02
 A            B               3              3PQR           10       2019-11-04 10:25:20
 N            P               4              4ABC          120       2019-11-05 08:35:00
 C            G               1              1ABC           50       2019-11-04 07:37:02
 D            B               4              4RST          200       2019-11-04 10:57:02
我有一个雄心勃勃的计划,将这个数据集可视化为一个定制的条形图,每个团队都有一个由不同宽度的块组成的建筑(条形图)(取决于与挑战相关的点),而块的垂直顺序取决于时间(第一个在底部)。简而言之,上述数据的曲线图大致如下所示-

这里不同的颜色代表不同的类别。我知道如何按团队对数据进行分组,然后根据每个团队的尝试次数绘制图-

df.groupby(['Team Name'])['Challenge'].count().plot.bar()
但除此之外,我不知道如何改变酒吧宽度。有人能帮忙吗? 或者,如果有人对如何使用任何传统的情节来形象化它有更好的想法,我也很想听听你的意见


谢谢

这看起来像你想要的吗

您可以通过
matplotlib.patches
手动绘制“块”来实现这一点,只需要在算法上进行一些额外的操作。下面是一个使用问题中提供的数据的完整示例

导入matplotlib.pyplot作为plt
从matplotlib.patches导入矩形
将numpy作为np导入
作为pd进口熊猫
t20=[(31119180),(174199232),(255127,14),(255187120)]
对于范围内的i(len(t20)):
r、 g,b=t20[i]
t20[i]=(r/255.,g/255.,b/255.)
图,ax=plt子批次(1)
df['Time']=pd.to_datetime(df['Time'])
df=df.sort_值(“时间”)
cat=df['Category'].unique()
cidx=dict(zip(cat),范围(len(cat)))
mw=最大值(df['点])
名称=列表(df['Team Name'].unique())
nt=len(名称)
h=0.5
hs=[0]*3
对于范围内的ii(长度(测向指数)):
w=浮动(df['点].iloc[ii])/mw
idx=names.index(df['Team Name'].iloc[ii])
r=矩形((idx-w/2.0,hs[idx]),w,h,color=t20[cidx[df['Category']].iloc[ii]])
hs[idx]+=0.5
ax.添加补丁(r)
plt.xlim([-0.5,len(名称)-0.5])
plt.ylim([0,最大值(hs)+3])
plt.xticks(范围(len(名称)),名称)
plt.show()
如果你感兴趣的话,我用了前4种颜色


编辑 可以使用该行添加图例

plt.legend(手柄=[Patch(facecolor=t20[ii],label=cat[ii]),用于范围内的ii(len(t20)))
只要包括从
matplotlib.Patches
额外导入
Patches
,即

从matplotlib.patches导入矩形,面片
输出将是


您的预期产出是多少?每个团队的总分?横杆的长度(Y轴)是每个团队尝试的挑战总数(计数)。这些点将被视为建筑上每个街区的宽度。我想你正在寻找堆叠的钢筋。是的!!:)非常感谢。如何根据颜色(类别)在地图上添加图例?非常感谢!!这比我尝试的要容易得多:)你能告诉我如何在单条中添加一些轮廓,以及如何排序(例如,我希望它们按从高到低的顺序排列B->P->G)?