【问题标题】:Trouble Shooting Python QuiverplotsPython 箭袋图故障排除
【发布时间】:2021-05-07 03:15:50
【问题描述】:

我一直在尝试使用 matplotlib 库绘制矢量线图,但我不断得到这样的结果:

不确定发生了什么,因为我正在运行的代码似乎遵循如何制作基本箭袋图的语法。我试过弄乱数组类型,看看这是否是问题,但没有运气。图上的某些点似乎没有获得任何矢量数据。

import matplotlib.pyplot as plt
import numpy as np


X = np.arange(-2,2,.1)
Y = np.arange(-2,2,.1)
x,y = np.meshgrid(X,Y)

m1 =1
m2 =2
x1 =4/3
x2 =2/3
omega = 3/8

u = -(m1/(abs(x-x1))**3)*(x-x1)-(m2/(abs(x-x2))**3)*(x-x2)+ x*omega
v = -(m1/(abs(y))**3)*(y)-(m2/(abs(y))**3)*(y)+ y*omega

fig, ax = plt.subplots()
ax.quiver(x,y,u,v)
plt.show()

【问题讨论】:

  • 请发布 MCVE。如果你不给我看,我无法弄清楚你在做什么。对于这么简单的事情,我应该能够将您的代码直接复制到我的 shell 中并运行它。
  • 对不起,我对编码礼仪还是有点陌生​​
  • 没问题。感谢您保持响应。正如答案所暗示的,你的情节是合理的。也许以对数方式缩放箭头?

标签: python numpy matplotlib numpy-ndarray


【解决方案1】:

y 的某些值接近于 0,因此您的 v 值非常大。我会检查方程,因为绘图实际上是正确的(当 y ~= 0 时,箭头无限大)。

【讨论】:

    【解决方案2】:

    我发现,查看数据的一个好方法是对矢量场进行归一化并按强度对其进行着色。您始终可以使用 Numpy MaskedArray 屏蔽强度过低的字形。看看下面。

    import matplotlib.colors as cl
    import matplotlib.pyplot as plt
    import matplotlib.ticker as tck
    import numpy as np
    
    x, y = np.meshgrid(np.linspace(-2, 2, 41), np.linspace(-2, 2, 41))
    
    m1, m2, x1, x2, omega = (1, 2, 4 / 3, 2 / 3, 3 / 8)
    
    u = -(m1 / abs(x - x1) ** 3 * (x - x1) - m2 / abs(x - x2) ** 3 * (x - x2)
          + x * omega)
    v = y * (omega - (m1 + m2) / abs(y) ** 3)
    
    fig, (ax, bx) = plt.subplots(ncols=2, figsize=(20, 10))
    
    ax.quiver(x, y, u, v, antialiased=True, scale=1e4, width=6e-3, headwidth=3,
              headlength=4, headaxislength=3.5, pivot='tail',
              edgecolors='xkcd:white', linewidths=1)
    ax.set_aspect('equal')
    
    w = np.sqrt(u ** 2 + v ** 2)
    quiv = bx.quiver(x, y, u / w, v / w, w, antialiased=True, scale=3e1,
                     width=6e-3, headwidth=3, headlength=4, headaxislength=3.5,
                     pivot='tail', edgecolors='xkcd:white', linewidths=1,
                     norm=cl.LogNorm(vmin=1e-1, vmax=1e3))
    bx.set_aspect('equal')
    fig.colorbar(quiv, cax=fig.add_axes([0.93, 0.1, 0.02, 0.8]),
                 extend='both', ticks=tck.LogLocator(),
                 format=tck.LogFormatterSciNotation())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 2020-07-16
      • 1970-01-01
      • 2013-07-15
      • 2010-11-30
      • 2021-09-11
      • 2012-02-18
      相关资源
      最近更新 更多