Линейный график Seaborn неправильно сортирует значения X - PullRequest
0 голосов
/ 07 мая 2020

У меня есть следующий образец набора данных:

InfectionDate   FER0    FER1    FER2    FER3    FER4    FER5    FER6    FER7    FER8    FER9    FER10   FER11   FER12   FER13
0   2   NaN NaN 319.0   NaN NaN NaN NaN NaN NaN NaN 510.2   NaN NaN NaN
1   1   NaN 886.2   NaN NaN NaN 960.8   NaN NaN NaN 915.9   NaN NaN NaN NaN
2   1   NaN NaN NaN NaN NaN NaN NaN NaN 847.2   NaN NaN NaN NaN NaN
3   1   NaN NaN NaN NaN NaN NaN 2308.0  1798.0  1517.0  NaN 1465.0  NaN NaN NaN
4   2   NaN NaN NaN NaN NaN NaN 2650.0  NaN NaN 1318.0  NaN NaN NaN NaN
5   2   NaN NaN NaN NaN NaN NaN 452.0   345.2   NaN NaN NaN NaN NaN NaN
6   2   NaN NaN NaN NaN 506.9   431.1   NaN NaN NaN NaN 852.8   NaN NaN NaN
7   2   NaN 184.0   NaN 535.0   NaN NaN NaN 1867.0  NaN NaN NaN NaN NaN 1097.0
8   0   217.0   NaN NaN NaN NaN NaN NaN NaN NaN 255.0   NaN 269.0   269.0   NaN
9   0   NaN NaN NaN 2263.0  NaN NaN NaN NaN NaN 2532.0  NaN NaN NaN NaN

Я рисую значения, используя следующий код:

plt.figure(figsize=(13, 10))
trend_df = pd.read_clipboard(sep="\s+")
melted_df = trend_df.melt(
    id_vars="InfectionDate",
    value_vars=["FER{}".format(i) for i in range(14)],
    var_name="Marker",
)
ax = sn.lineplot(
    x="Marker",
    y="value",
    data=melted_df,
    hue="InfectionDate",
    estimator=np.mean,
    palette="RdYlGn",
    legend=False,
    sort=False,
)

Но seaborn по-прежнему, похоже, применяет собственную сортировку :

enter image description here

Как это исправить?

1 Ответ

1 голос
/ 07 мая 2020

Я точно не знаю, какой результат вы ищете, но проблема заключается в том, что lineplot ожидает, что столбец x будет числовым c ( документация говорит о x, y: «Переменные входных данных; должны быть числовые c»).

Я думаю, вы вместо этого ищете pointplot, который строится на категориальной оси.

ax = sn.pointplot(...)

enter image description here

...