У меня есть кадр данных со следующей структурой:
Obj | Err | Start | End | Dur |
obj1| ac |{datetime}|{datetime}| 1.0 |
obj1| dc |{datetime}|{datetime}| 3.0 |
obj1| loc |{datetime}|{datetime}| 4.0 |
obj2| ac |{datetime}|{datetime}| 1.0 |
obj2| loc |{datetime}|{datetime}| 1.0 |
Я пытаюсь построить диаграмму рассеяния, где ось X - время начала ошибок переменного тока, ось Y - разница между переменным током. время начала и время начала других ошибок.
Что я попробовал.
Я создал кадр данных с вычисленной разницей во времени, который выглядит следующим образом:
Obj | Err | Start | End | Dur | Err_y | Start_y | End_y | Dur_y | Time diff
obj1| ac |{datetime}|{datetime}| 1.0 | dc |{datetime}|{datetime}| 3.0 | 2.0
obj1| ac |{datetime}|{datetime}| 3.0 | cell |{datetime}|{datetime}| 1.0 | 0.0
obj1| ac |{datetime}|{datetime}| 4.0 | loc |{datetime}|{datetime}| 1.0 | 3.0
obj2| ac |{datetime}|{datetime}| 1.0 | loc |{datetime}|{datetime}| 3.0 | 2.0
Но когда я пытаюсь построить его, я получил ошибку, котораяОси x и y должны быть одинаковой длины. Это мой код для построения графика:
for obj in data['Obj'].unique():
AC = data[data['Obj']==obj].reset_index(drop=True)
plt.figure(figsize=(10,5))
plt.scatter(AC[AC['Err_x']=='ac']['Start_x'].tolist(),AC[AC['Alarm_y']=='dc']['Time diff'],c='b', label = 'Battery')
plt.scatter(AC[AC['Err_x']=='ac']['Start_x'].tolist(),AC[AC['Alarm_y']=='loc']['Time diff'],c='b', label = 'Loc')
plt.scatter(AC[AC['Err_x']=='ac']['Start_x'].tolist(),AC[AC['Alarm_y']=='cell']['Time diff'],c='b', label = 'Cell')
plt.ylim(0,200)
plt.title(obj)
plt.legend()
Может быть, есть способ построить такой график без создания дополнительного кадра данных?