Как построить маркеры на графике python

#python #pandas #dataframe #graph

Вопрос:

У меня есть огромный фрейм данных python, который выглядит примерно так.

  HR     ICULOS  SepsisLabel PatientID
100.3      1         0          1
117.0      2         0          1
103.9      3         0          1
104.7      4         0          1
102.0      5         0          1
88.1       6         0          1
 

Получите доступ ко всему файлу здесь. Я построил колонку HR на основе ICULOS вот так. Код находится здесь:

 ax = plt.gca()

ax.set_title("Patient ID = 1")
ax.set_xlabel('ICULOS')
ax.set_ylabel('HR Readings')
dummy.plot(kind='line',x='ICULOS',y='HR',ax=ax)

plt.show()
 

Что я хочу, так это добавить маркер на график HR на основе SepsisLabel (см. Файл). При ICULOS = 249 метка сепсиса изменяется от 0 до 1. Я хочу показать, что в этот момент на графике метка сепсиса изменилась (это то, что я хочу).

Комментарии:

1. Если вы знаете, в какую точку вы хотите добавить маркер, вы можете просто использовать plt.scatter() для этого.

2. Мне не нужен точечный рисунок. Мне нужен этот линейный график, чтобы я мог легко видеть тенденцию. Кроме того, набор данных огромен. Я хочу, чтобы код выяснил, при каких значениях ICULOS, sepsisLabel изменяется с 0 на 1. Здесь я упомянул просто для удобства

3. Я не имел в виду всю точечную диаграмму. Вы можете создать точечную диаграмму поверх той, которая у вас уже есть, и использовать ограниченное количество очков. Это означает, что вам нужно найти индексы, в которых sepsisLabel изменяется с 0 на 1, и передавать только эти точки на точечную диаграмму. Насколько я знаю, нет встроенных функций для проверки, когда он меняется, хотя вам нужно будет написать код, который делает это самостоятельно.

4. Что касается получения точных индексов, в которых sepsisLabel изменяется на 1, вы можете использовать np.ediff1d()

Ответ №1:

Если я правильно понимаю, что вы хотите сделать, это 1) найти индекс изменения значения и 2) построить (рассеять) там точку с определенным типом маркера.

Что касается 1), вы можете использовать dummy['SepsisLabel'].diff().idxmax() . diff() создает массив из 0 с 1 при каждом изменении от 0 до 1 и обратно. idxmax() затем находит первое изменение — точку, которую вы ищете.

Объявление 2): Вы можете просто использовать plt.scatter(x, y, marker='X') перед plt.show() тем, как нарисовать точку. Все, что вы нарисуете ( pandas matplotlib или другие) перед вызовом plt.show() , все равно будет отображаться в сюжете.