matplotlib中quiver函数参数问题

我想请问大家,plt.quiver函数的参数scale和scale_units的具体意义是什么,查遍全网没看到有说的清楚的

plt.quiver()函数用于在二维坐标系中绘制矢量箭头。scale和scale_units是plt.quiver()函数中的两个参数,它们的含义如下:

scale:一个浮点数,表示箭头长度的缩放比例。默认值是1,表示不缩放。可以设置为任何正浮点数,通常设置为小于1的值,以避免箭头过大或过小。

scale_units:一个字符串,表示scale参数所表示的长度单位。默认值是'width',表示缩放比例是相对于图形的宽度。可以设置为'height'、'dots'、'inches'或者任何具有长度单位的字符串,以便以特定单位来缩放箭头的长度。

例如,如果将scale设置为0.5,表示将箭头的长度缩小一半。如果将scale_units设置为'inches',则scale参数将表示缩放比例是相对于英寸的。这意味着,如果一个箭头的长度是0.5英寸,当scale设置为2时,箭头的长度将被放大到1英寸。

需要注意的是,scale和scale_units参数的组合需要根据具体的应用场景来选择,以确保箭头的长度缩放比例符合预期。

plt.quiver() 函数是用于绘制二维向量场的函数,其中 scale 和 scale_units 是控制向量长度的两个参数。

具体来说:

scale 参数是一个浮点数,用于控制向量的长度缩放比例。默认情况下,向量的长度是基于当前绘图区域的大小和箭头的数量计算得出的,但是如果您想调整向量长度以使其更好地适应您的绘图,可以使用 scale 参数来调整。

scale_units 参数是一个字符串,用于指定 scale 参数的单位。它可以设置为 "width"、"height"、"dots" 或 "inches"。默认值是 "width",它表示缩放因子是相对于绘图区域宽度的。例如,如果 scale 设置为 1,scale_units 设置为 "width",则箭头长度将等于绘图区域宽度。

如果您想更精确地控制向量的长度,可以设置 scale 参数的值,然后根据需要选择适当的 scale_units 参数来缩放箭头。例如,如果您想使箭头长度等于 0.5 像素,请设置 scale 参数为 0.5,scale_units 为 "dots"。

注意,scale 和 scale_units 参数只影响箭头长度,不影响箭头的方向和位置。

plt.quiver() 是 Matplotlib 库中用于绘制二维向量场的函数。scale 和 scale_units 是其中的两个参数,它们的具体含义如下:

  • scale:用于控制向量的长度和大小比例的参数,是一个浮点数或可调用对象。如果 scale 是一个浮点数,则它表示向量的长度与箭头的长度之比。例如,scale=0.1 表示向量的长度是箭头长度的十分之一。如果 scale 是一个可调用对象,则它应该接受一个长度为 2 的数组作为输入,返回一个浮点数作为输出。这个函数可以用来根据数据的特点动态地调整向量的长度和大小比例。
  • scale_units:用于指定 scale 参数的单位。它可以是以下几种字符串之一:
  • 'width':表示 scale 参数以箭头宽度的一部分作为单位,例如 scale=0.1 表示向量长度是箭头宽度的十分之一。
  • 'height':表示 scale 参数以箭头高度的一部分作为单位,例如 scale=0.1 表示向量长度是箭头高度的十分之一。
  • 'dots':表示 scale 参数以像素点数作为单位,例如 scale=10 表示向量长度是 10 个像素点。
  • 'inches':表示 scale 参数以英寸为单位,例如 scale=0.1 表示向量长度是 0.1 英寸。
  • 'x':表示 scale 参数以 x 轴的数据单位为基础,例如 scale=0.1 表示向量长度是 x 轴上数据单位的十分之一。
  • 'y':表示 scale 参数以 y 轴的数据单位为基础,例如 scale=0.1 表示向量长度是 y 轴上数据单位的十分之一。
  • 'xy':表示 scale 参数以 x 和 y 轴的数据单位为基础,例如 scale=(0.1, 0.1) 表示向量长度分别是 x 轴和 y 轴上数据单位的十分之一。

需要注意的是,scale 和 scale_units 参数的具体含义取决于数据的尺度和坐标系的比例,因此在使用 plt.quiver() 函数时需要根据具体情况选择合适的参数值。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你看下这篇博客吧, 应该有用👉 :matplotlib.pyplot.quiver使用指南
  • 除此之外, 这篇博客: matplotlib 画点到点的箭头 quiver中的 代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    import matplotlib.pyplot as plt
    
    '''
    10
    0 8
    17 80
    6 81
    26 43
    63 14
    32 48
    41 33
    28 70
    50 0
    68 87
    '''
    
    class point:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
    def cmpx(p1, p2):
        if(p1.x==p2.x):
            return (p1.y<p2.y)
        return (p1.x<p2.x)
    
    def sort(points, cmp):
        n = points.__len__()
        for i in range(n):
            for j in range(n-1):
                if cmp(points[j], points[j+1]) == False:
                    points[j],points[j+1] = points[j+1], points[j]
    
    if __name__ == '__main__':
    	# 输入点
        points = []
        n = int(input())
        for i in range(n):
            x, y = map(int,input().split(' '))
            points.append(point(x, y))
            
    	# 按xy排序
        sort(points, cmpx)
    
    	# 设置画布
        fig = plt.figure()
        plt.xlim(-10, 90)
        plt.ylim(-10, 100)
    
    	# 画点
        for p in points:
            plt.plot(p.x, p.y, "o")
    		
    	# 画箭头
        for i in range(n-1):
            dx = points[i+1].x - points[i].x
            dy = points[i+1].y - points[i].y
            plt.quiver(points[i].x, points[i].y, dx, dy, angles='xy', scale=1.03, scale_units='xy', width=0.005)
    
        plt.show()
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^