рисовать точки, используя matplotlib.pyplot [[x1, y1], [x2, y2]] - PullRequest
37 голосов
/ 17 февраля 2010

Я хочу нарисовать график, используя список пар (x,y) вместо двух списков, одного из X и одного из Y. Как то так:

a = [[1,2],[3,3],[4,4],[5,2]]
plt.plot(a, 'ro')

Вместо:

plt.plot([1,3,4,5], [2,3,4,2])

Предложения

Ответы [ 4 ]

57 голосов
/ 23 февраля 2010

Вы можете сделать что-то вроде этого:

a=[[1,2],[3,3],[4,4],[5,2]]
plt.plot(*zip(*a))

К сожалению, вы больше не можете передавать «ro». Вы должны передать значения маркера и стиля линии в качестве параметров ключевых слов:

a=[[1,2],[3,3],[4,4],[5,2]]
plt.plot(*zip(*a), marker='o', color='r', ls='')

Я использовал трюк распаковка списков аргументов .

10 голосов
/ 21 мая 2012

Если вы используете массив numpy, вы можете извлечь по оси:

a = array([[1,2],[3,3],[4,4],[5,2]])
plot(a[:,0], a[:,1], 'ro')

Для списков или списков вам понадобится какой-нибудь помощник, например:

a = [[1,2],[3,3],[4,4],[5,2]]
plot(*sum(a, []), marker='o', color='r')
9 голосов
/ 18 мая 2014

список пониманий

Я настоятельно рекомендую либеральное применение списочных представлений. Они не только краткие и мощные, но и делают ваш код очень читабельным.

Попробуйте что-то вроде этого:

list_of_lists = [[1,2],[3,3],[4,4],[5,2]]    
x_list = [x for [x, y] in list_of_lists]
y_list = [y for [x, y] in list_of_lists]

plt.plot(x_list, y_list)

Следует избегать распаковки аргументов. Это некрасиво.

1 голос
/ 17 февраля 2010

Напишите вспомогательную функцию.

Вот длинная версия, но я уверен, что есть способ ее сжать.

>>> def helper(lst):
    lst1, lst2 = [], []
    for el in lst:
        lst1.append(el[0])
        lst2.append(el[1])
    return lst1, lst2

>>> 
>>> helper([[1,2],[3,4],[5,6]])
([1, 3, 5], [2, 4, 6])
>>> 

Также добавьте этот помощник:

def myplot(func, lst, flag):
    return func(helper(lst), flag)

И назовите это так:

myplot(plt.plot, [[1,2],[3,4],[5,6]], 'ro')

В качестве альтернативы вы можете добавить функцию к уже созданному объекту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...