简体   繁体   English

matplotlib绘制多条2点线,未合并

[英]matplotlib plot multiple 2 point lines, not joined up

I'd like to print a series of ticks on a scatter plot, the pairs of x and y points are stored in two nx2 arrays. 我想在散点图上打印一系列刻度线,成对的x和y点存储在两个nx2数组中。 Instead of small ticks between the pairs of points, it is printing lines between all the points. 而不是在成对的点之间打小勾,而是在所有点之间打印线。 Do I need to create n lines? 我需要创建n行吗?

xs.round(2)
Out[212]: 
array([[ 555.59,  557.17],
       [ 867.64,  869.  ],
       [ 581.95,  583.25],
       [ 822.08,  823.47],
       [ 198.46,  199.91],
       [ 887.29,  888.84],
       [ 308.68,  310.06],
       [ 340.1 ,  341.52],
       [ 351.68,  353.21],
       [ 789.45,  790.89]])

ys.round(2)
Out[213]: 
array([[ 737.55,  738.78],
       [ 404.7 ,  406.17],
       [   7.17,    8.69],
       [ 276.72,  278.16],
       [  84.71,   86.1 ],
       [ 311.89,  313.14],
       [ 615.63,  617.08],
       [ 653.9 ,  655.32],
       [  76.33,   77.62],
       [ 858.54,  859.93]])
plt.plot(xs, ys)

在此处输入图片说明

You need to iterate over the end points of the arrays xs and ys : 您需要遍历数组xsys的端点:

import matplotlib.pyplot as plt
import numpy as np

xs = np.array([[ 555.59,  557.17],
       [ 867.64,  869.  ],
       [ 581.95,  583.25],
       [ 822.08,  823.47],
       [ 198.46,  199.91],
       [ 887.29,  888.84],
       [ 308.68,  310.06],
       [ 340.1 ,  341.52],
       [ 351.68,  353.21],
       [ 789.45,  790.89]])


ys = np.array([[ 737.55,  738.78],
       [ 404.7 ,  406.17],
       [   7.17,    8.69],
       [ 276.72,  278.16],
       [  84.71,   86.1 ],
       [ 311.89,  313.14],
       [ 615.63,  617.08],
       [ 653.9 ,  655.32],
       [  76.33,   77.62],
       [ 858.54,  859.93]])

for segment in zip(xs, ys):
    plt.plot(segment)

plt.show()

在此处输入图片说明

The easiest solution is indeed to plot n lines. 实际上,最简单的解决方案是绘制n条线。

import numpy as np
import matplotlib.pyplot as plt

xs  =np.array([[ 555.59,  557.17],
       [ 867.64,  869.  ],
       [ 581.95,  583.25],
       [ 822.08,  823.47],
       [ 198.46,  199.91],
       [ 887.29,  888.84],
       [ 308.68,  310.06],
       [ 340.1 ,  341.52],
       [ 351.68,  353.21],
       [ 789.45,  790.89]])

ys = np.array([[ 737.55,  738.78],
       [ 404.7 ,  406.17],
       [   7.17,    8.69],
       [ 276.72,  278.16],
       [  84.71,   86.1 ],
       [ 311.89,  313.14],
       [ 615.63,  617.08],
       [ 653.9 ,  655.32],
       [  76.33,   77.62],
       [ 858.54,  859.93]])

for (x,y) in zip(xs,ys):
    plt.plot(x,y, color="crimson")

plt.show()

在此处输入图片说明

If n is very large, a more efficient solution would be to use a single LineCollection to show all lines. 如果n非常大,则更有效的解决方案是使用单个LineCollection显示所有行。 The advantage is that this can be drawn faster, since only a single collection is used instead of n line plots. 优点是可以更快地绘制图形,因为仅使用单个集合而不是n线图。

# data as above.
seq = np.concatenate((xs[:,:,np.newaxis],ys[:,:,np.newaxis]), axis=2)
c= matplotlib.collections.LineCollection(seq)
plt.gca().add_collection(c)
plt.gca().autoscale()

plt.show()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM