使用matplotlib.pyplot绘制点 [[x1,y1],[x2,y2]]
我想用一组 (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='')
我用的技巧是解包参数列表。