Отрисовка траекторий в matplotlib. Есть данные, нет ошибок, выдаёт пустой график

Не могу понять где косяк. Код:

colors = ['r', 'g', 'b']

for number_trajectory in range(number_of_files):
    for number_object in range(len(trajectories[number_trajectory])):
        ax1.plot(trajectories[number_trajectory][number_object].time, threshold_down_r[number_trajectory][number_object], "--", c=colors[number_trajectory])

В списке trajectories находятся вложенные списки с объектами классов. У каждого из них есть несколько характеристик (для примера - time). В списке threshold_down_r, также вложенные списки, каждый из которых выглядит примерно так (и в том, и в другом списке данных больше, но все вложенные списки по длине равны между собой, т.е. len(trajectories[1]) == len(threshold_down_r[1])):

trajectories[number_trajectory].time = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5]

threshold_down_r[number_trajectory] = [1950.0, 1950.0005, 1950.002, 1950.0045, 1950.008, 1950.0125, 1950.018, 1950.0245, 1950.032, 1950.0405, 1950.05, 1950.0605, 1950.072, 1950.0845, 1950.098, 1950.1125, 1950.128, 1950.1445, 1950.162, 1950.1805]

При запуске вышеприведённого кода никаких ошибок не выдаёт, но при этом показывает окно с пустым графиком.


Upd. Ради интереса изменила код, чтобы вторым списком, передавался список, а не объект:

for number_trajectory in range(number_of_files):
    for number_object in range(len(trajectories[number_trajectory])):
        ax1.plot(trajectories[number_trajectory][number_object].time, threshold_down_r[number_trajectory], "--", c=colors[number_trajectory])

Стало ругаться на строку и выдавать такие ошибки:

File "/usr/lib/python3/dist-packages/matplotlib/axes/_axes.py", line 1374, in plot for line in self._get_lines(*args, **kwargs):

File "/usr/lib/python3/dist-packages/matplotlib/axes/_base.py", line 303, in _grab_next_args for seg in self._plot_args(remaining, kwargs):

File "/usr/lib/python3/dist-packages/matplotlib/axes/_base.py", line 281, in _plot_args x, y = self._xy_from_xy(x, y)

File "/usr/lib/python3/dist-packages/matplotlib/axes/_base.py", line 223, in _xy_from_xy raise ValueError("x and y must have same first dimension")

ValueError: x and y must have same first dimension


Ответы (2 шт):

Автор решения: strawdog

Мне по вопросу трудно представить тип и размерность данных, передаваемых в отрисовку. я бы сделал как-то так:

X=[]
Y=[]
for number_trajectory in range(number_of_files):
    for number_object in range(len(trajectories[number_trajectory])):
        X.append(trajectories[number_trajectory][number_object].time)
        Y.append(threshold_down_r[number_trajectory][number_object])

а потом уже, вне цикла:

ax1.plot(X, Y, "--", c=colors[number_trajectory])

Плюс такого подхода еще в том, что вы всегда можете проверить после цикла X и Y, чтобы уточнить размерность и типы.

→ Ссылка
Автор решения: Wolf Spirit

Отрисовка была верная. Маркеров '--' было просто не видно на графике. При смене маркеров всё встало на свои места. Это странно, потому что до этого я рисовала этими же маркерами ('--') и они отображались нормально.

→ Ссылка