如何在Pandas数据框中绘制每一行并通过一列数据对其着色

woobm2wo  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(117)

我有Pandas表,看起来像:

| Sample | Type  | 1  | 2  | 3  | ...
| S1     | Type1 | 1  | 2  | 3  | ...
| S2     | Type2 | 5  | 6  | 7  | ...
| S3     | Type3 | 8  | 9  | 10 | ...
   ....
| S100   | Type3 | n  | n  | n  | ...

我想绘制多线图,其中每一行将颜色的类型从'类型'列(只有三种类型)。和轴必须是从列名的数字(1,2,3等)
我试过here的解决方案,但因为它绘制每一行,最后我有100多种不同的颜色。
下面是csv file和一个玩具示例
这就是我所做的基于与解决方案上面的链接。结果是好的,除了事实,我想只有3线的颜色,基于'类型'列

df = pd.read_csv('data.csv', sep=',')
df = df.set_index('Type')
df = df.drop(columns='Sample')

ax = df.T.plot(figsize=(7, 6))
ax.set_ylabel('Absolute Power (log)', fontsize=12)
ax.set_xlabel('Frequencies', fontsize=12)
plt.show()
dgtucam1

dgtucam11#

IIUC,您可以使用groupby绘制一组直线,然后只保留每条直线的一个示例来构建:

fig, ax = plt.subplots(figsize=(8, 6))
colormap = {'type 1': 'red', 'type 2': 'green', 'type 3': 'blue'}
custom_lines = {}

for name, subdf in df.groupby(level='Type'):
    lines = ax.plot(subdf.T, label=name, color=colormap[name])
    custom_lines[name] = lines[0]

ax.set_ylabel('Absolute Power (log)', fontsize=12)
ax.set_xlabel('Frequencies', fontsize=12)

plt.legend(custom_lines.values(), custom_lines.keys())
plt.show()

输出:

相关问题