首页 > 解决方案 > 在python中创建流图,ValueError:'x'的行必须相等

问题描述

我有一个向量场:

在此处输入图像描述

...但是当我想绘制相关的流图时,我得到一个错误:

ValueError:“x”的行必须相等

这是我的代码:

import matplotlib.pyplot as plt
import numpy as np


NY = 20; ymin = -2.; ymax = 2.
dy = (ymax -ymin )/(NY-1.)
NX = NY
xmin = -2.; xmax = 2.
dx = (xmax -xmin)/(NX-1.)


y = np.array([ ymin + float(i)*dy for i in range(NY)])
x = np.array([ xmin + float(i)*dx for i in range(NX)])

x, y = np.meshgrid( x, y, indexing = 'ij', sparse = False)

Fx  = np.cos(x + 2*y)
Fy  = np.sin(x - 2*y)

F = np.array([Fx, Fy])

# plotting the vectors
plt.quiver(x,y,Fx,Fy)
# Plotting stream plot 
plt.streamplot(x, y, Fx, Fy)

plt.show()

有谁知道为什么?我检查了尺寸,但它们似乎和我一样......

编辑:

来自特伦顿麦金尼的评论部分:

“注意这个答案中的xx和yy 。每一行都是一样的,但是每一行的值都在增加。你每一行的值都是一样的,但是每一行都在增加。”

在此处输入图像描述

... 我试过:

plt.streamplot(np.transpose(x), np.transpose(y), Fx, Fy)

但如您所见,流图不正确。

标签: pythonmatplotlibplot

解决方案


感谢 TrentonMcKinney 的评论,我意识到问题所在:

就我而言:

我的每一行中的值都是相同的,但每一行都在增加。

但我需要streamplot工作的是:

每一行都是一样的,但是每一行的值都在增加。

所以我indexing = 'ij'改为= 'xy'

x, y = np.meshgrid( x, y, indexing = 'xy', sparse = False)

完整代码:

import matplotlib.pyplot as plt
import numpy as np


NY = 20; ymin = -2.; ymax = 2.
dy = (ymax -ymin )/(NY-1.)
NX = NY
xmin = -2.; xmax = 2.
dx = (xmax -xmin)/(NX-1.)


y = np.array([ ymin + float(i)*dy for i in range(NY)])
x = np.array([ xmin + float(i)*dx for i in range(NX)])

x, y = np.meshgrid( x, y, indexing = 'xy', sparse = False)

Fx  = np.cos(x + 2*y)
Fy  = np.sin(x - 2*y)

F = np.array([Fx, Fy])

# plotting the vectors
plt.quiver(x,y,Fx,Fy)
# Plotting stream plot 
plt.streamplot(x, y, Fx, Fy)

plt.show()

在此处输入图像描述


推荐阅读