Сюжет Python выровнял метки и цвета в легенде - PullRequest
0 голосов
/ 19 октября 2019

У меня есть фрейм данных со многими столбцами и данными, приведенными ниже:

rse_df

           Vstart=29V        Vend=37V  ...      Vstart=36V      Vend=37V
0          4.174279            1.0  ...         0.517509            1.0
1          4.032258            1.5  ...              NaN            NaN
2          3.509288            2.0  ...              NaN            NaN
3          3.091149            2.5  ...              NaN            NaN
4          2.746441            3.0  ...              NaN            NaN
5          2.439879            3.5  ...              NaN            NaN
6          2.305721            4.0  ...              NaN            NaN
7          2.057234            4.5  ...              NaN            NaN
8          1.826651            5.0  ...              NaN            NaN
9          1.634388            5.5  ...              NaN            NaN
10         1.479945            6.0  ...              NaN            NaN
11         1.347369            6.5  ...              NaN            NaN
12         1.238585            7.0  ...              NaN            NaN
13         1.106522            7.5  ...              NaN            NaN
14         0.990119            8.0  ...              NaN            NaN

Я составил график, и результат приведен ниже:

enter image description here

В сюжете-легенде все представлены неправильно. Если вы видите первую метку «Vstart = 29V» в сюжете-легенде, она неправильно представлена. В кадре данных данные столбца «Vstart = 29V» представлены в верхней строке розовым цветом, но легенда говорит о синем цвете, что неправильно. Похоже, что-то здесь не так.

Мой код:

plt.plot(rse_df[rse_df.columns[1::2].values],rse_df[rse_df.columns[0::2].values],'-o',markerfacecolor='none')  
plt.legend(rse_df.columns[0::2].values.tolist(),fontsize=8,ncol=1)

что не так в приведенном выше коде, вызывая это неправильное выравнивание?

Approach1:

sns.lineplot(x=rse_df[rse_df.columns[1::2].values],y=rse_df[rse_df.columns[0::2].values], markers=True)
plt.show()

Вывод:

raise ValueError('If using all scalar values, you must pass'

ValueError: If using all scalar values, you must pass an index

1 Ответ

1 голос
/ 19 октября 2019

Использование seaborn:

  • seaborn.lineplot имеет ряд параметров для настройки данных, передаваемых функции, включая x и y параметров.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

print(df)

 Vstart=29V  Vstart=30V
   4.174279    2.726868
   4.032258    2.420029
   3.509288    2.158159
   3.091149    1.916360
   2.746441    1.816749
   2.439879    1.618786
   2.305721    1.462994
   2.057234    1.328884
   1.826651    1.212548
   1.634388    1.112656
   1.479945    1.027790
   1.347369    0.921890
   1.238585    0.846886
   1.106522         NaN
   0.990119         NaN

sns.lineplot(data=df, markers=True)
plt.show()

enter image description here

Ваш код:

  • Вы сместилистолбцы графика и столбцы легенды (например, [1::2] против [0::2])
  • Кроме того, этот код не соответствует сюжету в вопросе
    • Этот код отображает Vstart=30V противVstart=29V
  • График, показанный в вопросе, отображает все данные по оси Y с индексом в качестве оси X.
plt.plot(df[df.columns[1::2].values], df[df.columns[0::2].values], '-o', markerfacecolor='none')  
plt.legend(df.columns[0::2].values.tolist(),fontsize=8,ncol=1)

Сюжет, созданный с помощью кода, указанного в вопросе:

enter image description here

Этот участок с seaborn

sns.lineplot(x='Vstart=30V', y='Vstart=29V', data=df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...