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

42 投票
4 回答
83584 浏览
提问于 2025-04-15 19:24

我想用一组 (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 个回答

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)

尽量避免使用参数解包。这种写法不好看。

11

如果你在使用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')
66

你可以这样做:

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='')

我用的技巧是解包参数列表

撰写回答