在一个数据框中绘制 Python 中的多条线(每个类别一条线)
Graph multiple lines in Python (one line per categorie) in one dataframe
我有一个数据框,我想在其中创建折线图。我想要每个类别一行,在 x 轴上我想要日期,在 y 轴上我想要 12MKG。我不知道如何在线条上放置标签并使每个类别的线条颜色不同。
到目前为止我已经尝试过:
plt.plot(df['date'], datatoplot['12MKG'])
日期
类别
12MKG
202001
cat1
0.9836956
202002
cat1
0.9836956
202003
cat1
0.9831461
202004
cat1
0.97206706
202005
cat1
0.9698492
202006
cat1
0.97630334
202007
cat1
0.9787234
202008
cat1
0.9810606
202009
cat1
0.9825784
202010
cat1
0.98165137
202011
cat1
0.9768116
202012
cat1
0.96666664
202101
cat1
0.9655172
202102
cat1
0.95214105
202103
cat1
0.93721974
202104
cat1
0.9419087
202105
cat1
0.93158954
202106
cat1
0.9189189
202107
cat1
0.9144603
202001
cat2
0.3118644
202002
cat2
0.3006993
202003
cat2
0.3017544
202004
cat2
0.29433963
202005
cat2
0.3030303
202006
cat2
0.30483273
202007
cat2
0.33206108
202008
cat2
0.33730158
202009
cat2
0.344
202010
cat2
0.34008098
202011
cat2
0.34051725
202012
cat2
0.3224299
202101
cat2
0.33027524
202102
cat2
0.3187773
202103
cat2
0.29338843
202104
cat2
0.28458497
202105
cat2
0.2804878
202106
cat2
0.2804878
202107
cat2
0.2631579
您可以使用 colormap 为每行获取不同的颜色,并 df.loc 过滤每个类别
import matplotlib.pylab as pl
import matplotlib.pyplot as plt
labels = set(df['categorie'].values)
colors = pl.cm.jet(np.linspace(0,1,len(labels)))
for key, color in zip(labels, range(len(labels))):
data_x = df.loc[df['categorie']==key]['date']
data_y = df.loc[df['categorie']==key]['12MKG']
plt.plot(data_x, data_y, color=colors[color], label=key)
plt.legend()
plt.show()
我有一个数据框,我想在其中创建折线图。我想要每个类别一行,在 x 轴上我想要日期,在 y 轴上我想要 12MKG。我不知道如何在线条上放置标签并使每个类别的线条颜色不同。
到目前为止我已经尝试过:
plt.plot(df['date'], datatoplot['12MKG'])
日期 | 类别 | 12MKG |
---|---|---|
202001 | cat1 | 0.9836956 |
202002 | cat1 | 0.9836956 |
202003 | cat1 | 0.9831461 |
202004 | cat1 | 0.97206706 |
202005 | cat1 | 0.9698492 |
202006 | cat1 | 0.97630334 |
202007 | cat1 | 0.9787234 |
202008 | cat1 | 0.9810606 |
202009 | cat1 | 0.9825784 |
202010 | cat1 | 0.98165137 |
202011 | cat1 | 0.9768116 |
202012 | cat1 | 0.96666664 |
202101 | cat1 | 0.9655172 |
202102 | cat1 | 0.95214105 |
202103 | cat1 | 0.93721974 |
202104 | cat1 | 0.9419087 |
202105 | cat1 | 0.93158954 |
202106 | cat1 | 0.9189189 |
202107 | cat1 | 0.9144603 |
202001 | cat2 | 0.3118644 |
202002 | cat2 | 0.3006993 |
202003 | cat2 | 0.3017544 |
202004 | cat2 | 0.29433963 |
202005 | cat2 | 0.3030303 |
202006 | cat2 | 0.30483273 |
202007 | cat2 | 0.33206108 |
202008 | cat2 | 0.33730158 |
202009 | cat2 | 0.344 |
202010 | cat2 | 0.34008098 |
202011 | cat2 | 0.34051725 |
202012 | cat2 | 0.3224299 |
202101 | cat2 | 0.33027524 |
202102 | cat2 | 0.3187773 |
202103 | cat2 | 0.29338843 |
202104 | cat2 | 0.28458497 |
202105 | cat2 | 0.2804878 |
202106 | cat2 | 0.2804878 |
202107 | cat2 | 0.2631579 |
您可以使用 colormap 为每行获取不同的颜色,并 df.loc 过滤每个类别
import matplotlib.pylab as pl
import matplotlib.pyplot as plt
labels = set(df['categorie'].values)
colors = pl.cm.jet(np.linspace(0,1,len(labels)))
for key, color in zip(labels, range(len(labels))):
data_x = df.loc[df['categorie']==key]['date']
data_y = df.loc[df['categorie']==key]['12MKG']
plt.plot(data_x, data_y, color=colors[color], label=key)
plt.legend()
plt.show()