从数据框中绘制线

Plot line from dataframe

我有以下数据框 [1],其中包含与音乐收听相关的信息。我想打印一个折线图,如下所示 2(我通过手动输入数据得到的),其中 slotID 和平均 bpm 是相关的,而无需手动写入值。每个片段的长度必须为一个单位,并且必须与平均 bpm 匹配。

[1]

        slotID  NUn  NTot     MeanBPM
2        2       3       13  107.987769
9       11       3       30  133.772100
10      12       3       40  122.354025
13      15       4       44  123.221659
14      16       4       30  129.083900
15      17       9       66  123.274409
16      18       4       25  131.323480
18      20       5       40  124.782625
19      21       6       30  127.664467
20      22       6       19  120.483579

我用来获取剧情的代码如下:

import numpy as np
import pylab as pl
from matplotlib import collections  as mc

lines = [ [(2, 107), (3,107)], [(11,133),(12,133)], [(12,122),(13,122)], ]
c = np.array([(1, 0, 0, 1), (0, 1, 0, 1), (0, 0, 1, 1)])

lc = mc.LineCollection(lines, colors=c, linewidths=2)
fig, ax = pl.subplots()
ax.add_collection(lc)
ax.autoscale()
ax.margins(0.1)

获取数据:

import numpy as np
import pandas as pd



dfLunedi = pd.read_csv( "5.sab.csv", encoding = "ISO-8859-1", sep = ';')

dfSlotMean = dfLunedi.groupby('slotID', as_index=False).agg( NSabUn=('date', 'nunique'),NSabTot = ('date', 'count'), MeanBPM=('tempo', 'mean') )



df = pd.DataFrame(dfSlotMean)
df.to_csv('sil.csv', sep = ';', index=False)

df.drop(df[df.NSabUn < 3].index, inplace=True)

您可以遍历行并像这样绘制每个线段:

for _, r in df.iterrows():
    plt.plot([r['slotID'], r['slotID']+1], [r['MeanBPM']]*2)

输出: