график Python с двумя временными точками с наклоном

avatar
honeymoon
9 августа 2021 в 07:10
82
1
0

Я хочу построить несколько диаграмм в виде FacetGrid, каждая из которых включает две точки времени. Кроме того, я хочу рассчитать и отобразить наклон линии:

ID     TimePoint1    TimePoint2
================================
A      500           20000
B      200           1000
C      3000          50000

Что-то вроде этого: enter image description here

Я попробовал этот пример кода, но на графиках ничего не отображается:

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_table("test.csv", sep=",")
g = sns.FacetGrid(data, col="ID", col_wrap=4, height=2, ylim=(0, 10))
g.map(sns.pointplot, "TimePoint1", "TimePoint2", color=".3", ci=None)

Как я могу добиться этого с Seaborn?

Источник

Ответы (1)

avatar
mozway
9 августа 2021 в 07:27
3

Здесь вы использовали TimePoint1 как x и TimePoint2 как y. Чтобы достичь того, чего вы хотите, вам нужно сначала изменить форму ваших данных. Предположим, что data входные данные:

import pandas as pd
import matplotlib.pyplot as plt
data_long = (data.rename(columns=lambda x: int(x[-1]) if x.startswith('TimePoint') else x)
                 .melt(id_vars=['ID'], var_name='TimePoint')
             )
g = sns.FacetGrid(data_long, col="ID", col_wrap=4, height=2,) # ylim=(0, 10))
g.map(sns.pointplot, "TimePoint", "value", color=".3", ci=None)

выход:

seaborn pointplot

Примечание. Я удалил ваш недействительный ylim

data_long:

  ID TimePoint  value
0  A         1    500
1  B         1    200
2  C         1   3000
3  A         2  20000
4  B         2   1000
5  C         2  50000

Вы также можете удобно использовать catplot, который является оболочкой FacetGrid:

sns.catplot(data=df_long, x='TimePoint', y='value', col='ID',
            col_wrap=4, height=2, color=".3", ci=None, kind='point'
           )
tdy
9 августа 2021 в 08:08
3

примечание: OP может упростить FacetGrid+map, используя оболочку catplot: sns.catplot(x="TimePoint", y="value", col="ID", col_wrap=4, height=2, color=".3", ci=None, kind="point", data=data_long)

mozway
9 августа 2021 в 08:19
0

@tdy Да, правда, я просто использовал исходный код OP, но это очень хороший момент. Я обновил ответ.

honeymoon
9 августа 2021 в 08:23
0

@mozway Понятно, не понял, что мне нужно переформатировать данные. Спасибо!