我知道还有另一个非常相似的问题,但我无法从中提取所需的信息。
我在(x,y)
平面上有4个点:x=[x1,x2,x3,x4]
和y=[y1,y2,y3,y4]
x=[-1 ,0.5 ,1,-0.5]
y=[ 0.5, 1, -0.5, -1]
现在,我可以通过以下方式绘制四点:
import matplotlib.pyplot as plt
plt.plot(x,y, 'ro')
plt.axis('equal')
plt.show()
但是,除了这四点之外,我想有两行:
1)将(x1,y1)
与(x2,y2)
连接起来
2)第二个将(x3,y3)
与(x4,y4)
连接起来。
这是一个简单的玩具示例。在实际情况中,我在飞机上有2N点。
如何获得所需的输出:对于有两条连线的点?
谢谢。
答案 0 :(得分:18)
我认为每个细分市场都需要单独的行:
import numpy as np
import matplotlib.pyplot as plt
x, y = np.random.random(size=(2,10))
for i in range(0, len(x), 2):
plt.plot(x[i:i+2], y[i:i+2], 'ro-')
plt.show()
(numpy
导入只是为了设置一些随机的2x10样本数据)
答案 1 :(得分:8)
您只需将要连接的两个点的列表传递给plt.plot
即可。为了使这个可以轻松扩展到你想要的任意点,你可以定义一个这样的函数。
import matplotlib.pyplot as plt
x=[-1 ,0.5 ,1,-0.5]
y=[ 0.5, 1, -0.5, -1]
plt.plot(x,y, 'ro')
def connectpoints(x,y,p1,p2):
x1, x2 = x[p1], x[p2]
y1, y2 = y[p1], y[p2]
plt.plot([x1,x2],[y1,y2],'k-')
connectpoints(x,y,0,1)
connectpoints(x,y,2,3)
plt.axis('equal')
plt.show()
注意,该功能是一般功能,可以将列表中的任意两个点连接在一起。
要将此扩展为2N点,假设您始终将点i
连接到点i+1
,我们可以将其置于for循环中:
import numpy as np
for i in np.arange(0,len(x),2):
connectpoints(x,y,i,i+1)
在总是将点i
连接到点i+1
的情况下,您可以这样做:
for i in np.arange(0,len(x),2):
plt.plot(x[i:i+2],y[i:i+2],'k-')
答案 2 :(得分:5)
我知道这个问题是很久以前问过的,但是答案并没有给出我认为是最简单的解决方案。尽可能避免循环几乎总是一个好主意,并且matplotlib的$sql = "SELECT * FROM files where departmentid=".$_SESSION['deptid']."";
$deptids = implode(',', $_POST['deptid']);
能够用一个命令绘制多条线。如果plot
和x
是数组,则y
为每一列绘制一行。
根据您的情况,您可以执行以下操作:
plot
有很长的x和y列表,并且想连接相邻的对吗?
x=np.array([-1 ,0.5 ,1,-0.5])
xx = np.vstack([x[[0,2]],x[[1,3]]])
y=np.array([ 0.5, 1, -0.5, -1])
yy = np.vstack([y[[0,2]],y[[1,3]]])
plt.plot(xx,yy, '-o')
是否需要为点和线指定(不同)颜色?
xx = np.vstack([x[0::2],x[1::2]])
yy = np.vstack([y[0::2],y[1::2]])
答案 3 :(得分:1)
使用matplotlib.arrow()功能并将参数head_length和head_width设置为零,以获得" arrow-end"。 可以使用向量加法简单地计算不同点之间的连接: A = [1,2],B = [3,4] - > A和B之间的连接是B-A = [2,2]。 从A的尖端开始绘制此向量在B的末端结束。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
style.use('fivethirtyeight')
A = np.array([[10,8],[1,2],[7,5],[3,5],[7,6],[8,7],[9,9],[4,5],[6,5],[6,8]])
fig = plt.figure(figsize=(10,10))
ax0 = fig.add_subplot(212)
ax0.scatter(A[:,0],A[:,1])
ax0.arrow(A[0][0],A[0][1],A[1][0]-A[0][0],A[1][1]-A[0][1],width=0.02,color='red',head_length=0.0,head_width=0.0)
ax0.arrow(A[2][0],A[2][1],A[9][0]-A[2][0],A[9][1]-A[2][1],width=0.02,color='red',head_length=0.0,head_width=0.0)
ax0.arrow(A[4][0],A[4][1],A[6][0]-A[4][0],A[6][1]-A[4][1],width=0.02,color='red',head_length=0.0,head_width=0.0)
plt.show()