如何使用Matplotlib颤动刻度

bob*_*nto 6 python plot matplotlib

我需要做一系列矢量绘图。我可以使用matplotlib的颤抖例程获取任意数量的绘图。关键是,颤动器会自动缩放每个图,但是我需要每个图中的向量都代表相同的比例。例如,如果在一个绘图中以1cm的矢量表示10 km / hr,则在所有绘图中以1cm的矢量表示10km / hr。(我真的不在乎矢量是否具体为1cm。这只是一个例子。)我想我可以通过分别为每个图调整scale参数来实现这一点。但这似乎不起作用。

例如,我在第一个图中找到最大速度mxs1,然后对每个图执行类似的操作

mxspd = np.max(speed[n])
pylab.quiver(x,y,vx[n],vy[n],scale=mxs1/mxspd)
Run Code Online (Sandbox Code Playgroud)

但这不能充分调整向量的长度。例如,在我尝试的情况下,mxspd大约是的一半mxs1,因此绘图中的向量的n长度应大约是第一个绘图中向量的一半。但是,两个图中的向量的长度几乎相同。

uay*_*ver 6

上面的答案先验地匹配了两个图的比例。

下面的解决方案通过从第一个图中获取自动确定的比例并将其应用于第二个图来匹配后部的比例。

这可能并不总是有效,因为它使用私人电话,但解决了我的问题。

import matplotlib
import numpy as np
import matplotlib.pyplot as plt

x, y = np.mgrid[0:20, 0:25]
u = np.sin(2 *x * np.pi / 20)
v = np.cos(2 * y * np.pi / 25)

fig, (ax_l, ax_r) = plt.subplots(1, 2, figsize=(8, 4))

Q = ax_r.quiver(x, y, u, v, scale=None, scale_units='inches')

Q._init()
assert isinstance(Q.scale, float)

ax_l.quiver(x, y, 2*u, 2*v, scale=Q.scale, scale_units='inches')

ax_l.set_title('2x')
ax_r.set_title('1x')
Run Code Online (Sandbox Code Playgroud)

显示具有匹配比例的两个图的图像。


tac*_*ell 5

import matplotlib
import numpy as np
import matplotlib.pyplot as plt

x, y = np.mgrid[0:20, 0:25]
u = np.sin(2 *x * np.pi / 20)
v = np.cos(2 * y * np.pi / 25)

fig, (ax_l, ax_r) = plt.subplots(1, 2, figsize=(8, 4))

ax_r.quiver(x, y, u, v, scale=5, scale_units='inches')
ax_l.quiver(x, y, 2*u, 2*v, scale=5, scale_units='inches')

ax_l.set_title('2x')
ax_r.set_title('1x')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

请参阅文档,以获取有关scale和的解释scale_units

  • 这个答案没有提供仍然利用自动缩放的解决方案,例如通过将后续颤动图的比例链接到第一个的自动缩放值。 (2认同)