Ошибка значения: x и y должны иметь одинаковое первое измерение, но иметь формы (6,) и (3,)

#python #matplotlib

Вопрос:

Я понимаю, что этот вопрос задавался раньше, но предлагаемые решения о преобразовании списка в массив numpy не решают мою проблему. У меня есть фрейм данных, который выглядит так:

 pop_member                                             scores  
0           0  [0.18041600508077302, 0.22858464943610304, 0.2...   
1           1  [0.20068084127748528, 0.21373704261775583, 0.3...   
2           2  [0.16593641522899372, 0.38625108196251007, 0.3...   
3           3  [0.166185834331544, 0.33164031068142613, 0.191...   
4           4  [0.18027798511494217, 0.18249255288904706, 0.1...   

                                            timestep  
0  [0.0013907990823846528, 0.18140509483556186, 0...  
1  [0.0013907990823846528, 0.1724678206436131, 0....  
2  [0.0013907990823846528, 0.16461921052581957, 0...  
3  [0.0013907990823846528, 0.15999631524775232, 0...  
4  [-0.25701551548128926, 0.17441802772910156, 0....  
 

Столбцы оценки и временные интервалы содержат списки. Значения для воспроизведения приведены ниже:

 pop member 0
scores: [0.18041601 0.22858465 0.2236205 ]
timestep: [0.0013908  0.18140509 0.20914713 0.17436499 0.1785457  0.18833733]
pop member 1
scores: [0.20068084 0.21373704 0.31533351]
timestep: [0.0013908  0.17246782 0.17146181 0.27099373 0.16979124 0.16125755]
pop member 2
scores: [0.16593642 0.38625108 0.3025389 ]
timestep: [0.0013908  0.16461921 0.16421641 0.14843701 0.17370711 0.17566512]
pop member 3
scores: [0.16618583 0.33164031 0.19115312]
timestep: [0.0013908  0.15999632 0.16095213 0.17207548 0.1702441  0.15623793]
pop member 4
scores: [0.18027799 0.18249255 0.13129566 0.19134298]
timestep: [-0.25701552  0.17441803  0.17666349  0.18146539  0.17697329  0.18239527]
 

Я пытаюсь построить временной шаг по оси x и оценки по оси y, используя следующий код:

 # plot scores with timesteps 
c = ['blue', 'olive', 'yellow', 'red', 'purple']
for p in range(len(test)):
    plt.plot('timestep', 'scores', data=test.iloc[p], color=c[p], linewidth=2)
plt.legend()
plt.xlabel('Timesteps')
plt.ylabel('Scores')
plt.show()
 

Я уже пытался преобразовать списки в массивы numpy. Не работает. Любые другие предложения, пожалуйста?

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

1. пожалуйста, предоставьте список scores , и timestep таким образом мы сможем скопировать их и воспроизвести вашу проблему

2. Готово, пожалуйста, смотрите сейчас! Извини, что не отдал их раньше.

3. ошибка значения, которую вы получаете, оправдана, хотя у вас есть 3 элемента scores и 6 элементов timestep . Как вы ожидаете, что эти элементы будут соединены? например, для pop member 0 : (x0, y0)=(0.18041601, 0.0013908) , (x1, y1) = (0.22858465, 0.18140509) , (x2, y2) = (0.2236205, 0.20914713) и что будет дальше?

4. ох. Я понимаю. Спасибо за объяснение, тогда я попытаюсь разобраться в самих данных.

5. конечно, спросите еще раз, если вы застряли 🙂 кстати, я не думаю, что это правильно: plt.plot('timestep', 'scores', data=test.iloc[p], color=c[p], linewidth=2) . Я думаю, ты что-то перепутал df.plot и plt.plot