python pandas 来自 df 的绘图
python pandas graphing from df
我有一个数据框,想制作数据的折线图,但对如何操作感到困惑。随着时间的推移,我的图表将是“A
M
线(男性)”,haps
('G', 'A', 'A', 'C', 'C')
。
X 轴是年份,Y 轴是每年 haps
的数量,使用 0
.
中的数字绘制图表
在每张图中,该组的不同单倍型都有线条,我使用一组来提供一个简单的例子。
假设实际数据集中有多个 Lines
和 haps
,我应该使用什么来创建图表?
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')
结果是几个像这样的图:
这是你要找的吗?
我有一个数据框,想制作数据的折线图,但对如何操作感到困惑。随着时间的推移,我的图表将是“A
M
线(男性)”,haps
('G', 'A', 'A', 'C', 'C')
。
X 轴是年份,Y 轴是每年 haps
的数量,使用 0
.
在每张图中,该组的不同单倍型都有线条,我使用一组来提供一个简单的例子。
假设实际数据集中有多个 Lines
和 haps
,我应该使用什么来创建图表?
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')
结果是几个像这样的图:
这是你要找的吗?