Мой текущий код создает перекрывающиеся цифры для каждого элемента в тесте списка. Как я могу создать две отдельные фигуры, используя понимание списка? (Желательно использовать только одну строку кода).
test=[[1, 2, 3, 4],[5, 6, 7, 8]]
[plt.plot(test[k]) for k in range(0,2)]
Текущий вывод выглядит следующим образом:
Понял. Спасибо за полезные комментарии.
Как объясняется в Руководстве по использованию Matplotlib , plt.plot
работает так же, как метод построения графика ax.plot
:
для каждого метода построения графиков осей в модуле matplotlib.pyplot есть соответствующая функция, которая выполняет этот график на «текущих» осях, создавая эти оси (и их родительскую фигуру), если они еще не существуют.
Поэтому, когда вы запускаете понимание списка, которое вы привели в качестве примера, первый вызов метода plt.plot
в цикле for
создает новый объект фигура , содержащий дочерний объект Axes. Затем, как отмечено в учебном разделе Matplotlib Pyplot о работе с несколькими фигурами и осями:
MATLAB и pyplot имеют концепцию текущей фигуры и текущих осей. Все функции построения графика применяются к текущим осям.
Вот почему все последующие вызовы plt.plot
в цикле отображаются на одном рисунке. Чтобы рисовать линии на отдельных фигурах, необходимо создавать новую фигуру для каждого вызова plt.plot
, например:
test = [[1, 2, 3, 4],[5, 6, 7, 8]]
for k in range(len(test)): plt.figure(), plt.plot(test[k])
Редактировать: на основе комментария JohanC (по вопросу) понимание списка заменено однострочным составным оператором. Несмотря на то, что это противоречит рекомендациям PEP 8, это действительно делает код более читабельным, удовлетворяя при этом однострочному требованию.
Спасибо за подробное объяснение!
Обратите внимание, что это действительно не очень хороший вариант использования для понимания списка. Чтобы записать это в одну строку, вы можете использовать
for k in range(0,2)
: plt.plot(test[k])`. Здесь понимание списка не делает вещи компактнее и не легче для чтения.