Я думаю, что следующий код сделает эту работу, намного проще.
def myfunc(df, id=0, column='x'):
return np.fmax(df.loc[df['id'] == id, column],
np.add(df.loc[df['id'] == id - 1, column],
df.loc[df['id'] == id, 'y']))
for id in range(1, 5):
df_1.loc[df_1['id'] == id, 'x'] = \
df_1.groupby('gid').apply(myfunc, id=id).values
Рисунок графика является довольно сложным предметом вследствие того, что различные графики должны быть оттянуты по-разному - нет никаких соответствий алгоритма всего подхода.
Позвольте мне предложить следующий ресурс:
Это должна быть хорошая начальная точка, страница 15 предоставляет много ссылок и книг для продолжения.
Для начала работы с алгоритмами визуализации графика посмотрите эту известную бумагу:
Это описывает алгоритм, используемый dot
, graphviz графический редактор. На связанной странице Вы найдете намного больше ссылок. Вы также найдете еще некоторые бумаги, когда Вы погуглите для "рисования ориентированных графов".
Кроме того, Вы могли бы найти OpenFst удобным, общий инструментарий для конечных автоматов. Это имеет двоичный файл, названный fstdraw, который произведет конечный автомат в формате, который может быть считан dot
.
Выезд Graphviz. Это - программное обеспечение визуализации графика с открытым исходным кодом.
Править: Проверьте раздел документации, который связывается с некоторыми используемыми алгоритмами макета.
Возможно, я немного запоздал с ответом на этот вопрос. В любом случае, это очень исчерпывающий справочник по различным типам графиков и алгоритмам их визуализации.