python pandas 来自 df 的绘图

python pandas graphing from df

我有一个数据框,想制作数据的折线图,但对如何操作感到困惑。随着时间的推移,我的图表将是“A M 线(男性)”,haps ('G', 'A', 'A', 'C', 'C')

X 轴是年份,Y 轴是每年 haps 的数量,使用 0.

中的数字绘制图表

在每张图中,该组的不同单倍型都有线条,我使用一组来提供一个简单的例子。

假设实际数据集中有多个 Lineshaps,我应该使用什么来创建图表?

df

Line Sex haps 0 generation
A M ('G', 'A', 'A', 'C', 'C') 25 2001
A M ('G', 'A', 'A', 'C', 'C') 25 2002
A M ('G', 'A', 'A', 'C', 'C') 5 2003
A M ('G', 'A', 'A', 'C', 'C') 9 2004
A M ('G', 'A', 'A', 'C', 'C') 15 2005
A M ('G', 'A', 'A', 'C', 'C') 27 2006

我试过了sns.lineplot(data=clean, x='generation', y=0, hue='Line', marker='o') 我得到了一张包含所有 Lines 的图表,但我想将它们分开,但不知道该怎么做。

这是一个建议。

示例数据框(值等可能是无意义的):

from random import randint

columns = ['Line', 'Sex', 'haps', '0', 'generation']
haps = [('G', 'A', 'A', 'C', 'C'), ('G', 'A', 'A', 'A', 'C')]
data = [
    [line, sex, hap, randint(5, 30), year]
    for line in ['A', 'B'] for sex in ['M', 'F']
    for hap in haps for year in range(2001, 2007)
]

现在您可以执行以下操作以在一个图中显示所有内容:

import matplotlib.pyplot as plt

df_plt = df.pivot(index='generation', columns=['Line', 'Sex', 'haps'], values='0')
df_plt.plot()
plt.show()
# plt.savefig('plot_all.png')

结果类似于:

line-sex组:

import matplotlib.pyplot as plt

for (line, sex), sdf in df.groupby(['Line', 'Sex'], as_index=False):
    sdf_plt = sdf.pivot(index='generation', columns=['Sex', 'haps'], values='0')
    sdf_plt.plot(title=f'Line: {line} - Sex: {sex}')
    plt.show()
    # plt.savefig(f'plot_{line}_{sex}.png')

结果是几个像这样的图:

这是你要找的吗?