使用matplotlib.pyplot [[x1,y1],[x2,y2]]绘制点

ari*_*iel 38 python matplotlib

我想使用对列表绘制图形,(x,y)而不是使用两个列表,一个是X,另一个是Y. 像这样的东西:

a = [[1,2],[3,3],[4,4],[5,2]]
plt.plot(a, 'ro')
Run Code Online (Sandbox Code Playgroud)

而不是:

plt.plot([1,3,4,5], [2,3,4,2])
Run Code Online (Sandbox Code Playgroud)

建议?

Chr*_*lis 58

你可以这样做:

a=[[1,2],[3,3],[4,4],[5,2]]
plt.plot(*zip(*a))
Run Code Online (Sandbox Code Playgroud)

不幸的是,你不能再通过'ro'了.您必须将标记和线条样式值作为关键字参数传递:

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

我使用的技巧是解压缩参数列表.

  • 我通常使用`plt.plot(*np.transpose(a))`(我称之为`import numpy as np`),这相当于你的建议. (6认同)

ppr*_*mek 10

如果你使用的是numpy数组,你可以按轴提取:

a = array([[1,2],[3,3],[4,4],[5,2]])
plot(a[:,0], a[:,1], 'ro')
Run Code Online (Sandbox Code Playgroud)

对于列表或列表,您需要一些帮助,例如:

a = [[1,2],[3,3],[4,4],[5,2]]
plot(*sum(a, []), marker='o', color='r')
Run Code Online (Sandbox Code Playgroud)


Mor*_*ogy 9

列表理解

我强烈建议列表理解的自由应用.它们不仅简洁而且功能强大,而且往往使您的代码具有可读性.

尝试这样的事情:

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)
Run Code Online (Sandbox Code Playgroud)

应避免参数拆包.这很难看.


Ham*_*jan 1

编写一个辅助函数。

这是一个较长的版本,但我确信有一个压缩它的技巧。

>>> 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])
>>> 
Run Code Online (Sandbox Code Playgroud)

还添加这个助手:

def myplot(func, lst, flag):
    return func(helper(lst), flag)
Run Code Online (Sandbox Code Playgroud)

并这样称呼它:

myplot(plt.plot, [[1,2],[3,4],[5,6]], 'ro')
Run Code Online (Sandbox Code Playgroud)

或者,您可以将函数添加到已实例化的对象中。