当我画箭头的方向时,我遇到了一些问题。我有点(x,y)坐标和它们的角度。我想要做的是根据给定的角度绘制箭头(只是为了显示 点方向为每个点坐标中的箭头)。在这里,我们应该假设'+ x','+ y',' - x',' - y'的坐标分别为90度,0度,270度,180度。
我对Python绘图工具有点不熟悉。我仍然不确定绘制方向点(基于角度的箭头)我是否使用pylab或其他模块或..仍然不确定。我把以下代码 作为一个样本,以提供更好的描述:
# Inputs:
x = np.array([ 2, 4, 8, 10, 12, 14, 16])
y = np.array([ 5, 10, 15, 20, 25, 30, 35])
angles = np.array([45,275,190,100,280,18,45])
import numpy as np
import scipy as sp
import pylab as pl
def draw_line(x,y,angle):
# First, draw (x,y) coordinate ???
# Second, according to the angle indicate the direction as an arrow ???
答案 0 :(得分:7)
您可以使用matplotlib.pyplot.arrow(x, y, dx, dy, hold=None, **kwargs)
绘制箭头。您似乎遇到困难的部分是在给定角度和箭头长度dx
的情况下定义偏移dy
和r
。对于弧度为angle
的极坐标
dx = r*cos(angle)
dy = r*sin(angle)
以便draw_line
功能变为
def draw_line(x, y, angle):
r = 1 # or whatever fits you
arrow(x, y, r*cos(angle), r*sin(angle))
这将从(x,y)
开始向angle
方向画一个长度为1
的箭头。
答案 1 :(得分:1)
您指定的角度遵循地图约定,而笛卡尔约定分别具有(+ x,+ y,-x,-y)(0,90,180,270)。他们也会采取弧度。转换你的角度:
import math
cartesianAngleRadians = (450-mapAngleDegrees)*math.pi/180.0
此处的源代码根据您提供的x,y点绘制刻度线。
import numpy as np
import scipy as sp
import pylab as pl
import math
x = np.array([ 2, 4, 8, 10, 12, 14, 16])
y = np.array([ 5, 10, 15, 20, 25, 30, 35])
angles = np.array([45,275,190,100,280,18,45])
def draw_line(x,y,angle,length):
cartesianAngleRadians = (450-angle)*math.pi/180.0
terminus_x = x + length * math.cos(cartesianAngleRadians)
terminus_y = y + length * math.sin(cartesianAngleRadians)
pl.plot([x, terminus_x],[y,terminus_y])
print [x, terminus_x],[y,terminus_y]
pl.axis('equal')
pl.axis([-5,20,-5,40])
for i in range(0,len(x)):
print x[i],y[i],angles[i]
draw_line(x[i],y[i],angles[i],1)
pl.show()