gpt4 book ai didi

python - Python中自定义宽度的条形图

转载 作者:行者123 更新时间:2023-12-04 10:46:41 25 4
gpt4 key购买 nike

我有这个数据框 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

我有一个雄心勃勃的计划,将这个数据集可视化为一个定制的条形图,其中每个团队都有一个由不同宽度的不同块组成的建筑物(条)(取决于与该挑战相关的点),并且块的垂直顺序将取决于时间(第一个在底部)。简而言之,上述数据的绘图应该大致如下 -

enter image description here

这里不同的颜色代表不同的类别。我知道如何按团队对数据进行分组,然后通过以下方式绘制每个团队的尝试次数 -
df.groupby(['Team Name'])['Challenge'].count().plot.bar()

但除此之外,我对如何更改条形宽度一无所知。有人可以帮忙吗?
或者,如果有人对如何使用任何传统绘图进行可视化有更好的想法,我也很想听听您的意见。

谢谢!

最佳答案

这看起来像你想要的吗?

enter image description here

您可以通过 matplotlib.patches 手动绘制“块”来完成此操作。 ,它只需要一些额外的操作就可以在算法上做到这一点。这是使用问题中提供的数据的完整示例

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
import numpy as np
import pandas as pd

t20 = [(31, 119, 180), (174, 199, 232), (255, 127, 14), (255, 187, 120)]
for i in range(len(t20)):
r, g, b = t20[i]
t20[i] = (r / 255., g / 255., b / 255.)

fig, ax = plt.subplots(1)
df['Time'] = pd.to_datetime(df['Time'])
df = df.sort_values('Time')
cat = df['Category'].unique()
cidx = dict(zip(cat, range(len(cat))))

mw = max(df['Points'])
names = list(df['Team Name'].unique())
nt = len(names)
h = 0.5
hs = [0]*3
for ii in range(len(df.index)):
w = float(df['Points'].iloc[ii])/mw
idx = names.index(df['Team Name'].iloc[ii])
r = Rectangle((idx - w/2.0, hs[idx]), w, h, color=t20[cidx[df['Category'].iloc[ii]]])
hs[idx] += 0.5
ax.add_patch(r)
plt.xlim([-0.5, len(names)-0.5])
plt.ylim([0, max(hs)+3])
plt.xticks(range(len(names)), names)
plt.show()

我使用了 tableau 20 palette 中的前 4 种颜色如果你有兴趣。

编辑

您可以使用该行添加图例

plt.legend(handles=[Patch(facecolor=t20[ii], label=cat[ii]) for ii in range(len(t20))])

只要追加导入 Patches来自 matplotlib.patches包括在内,即

from matplotlib.patches import Rectangle, Patch

输出将是

Plot with legend

关于python - Python中自定义宽度的条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59675306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com