quiverを使った、同じ結果を与えるはずの2つのコードの結果が異なる理由を知りたいです

実現したいこと

コード1、コード2は同じ結果を与えると思っているのですが、実際は異なる結果を与えます。2つのコードは###で挟まれた部分だけが異なります。

コード1を実行すると
イメージ説明
コード2を実行すると
イメージ説明
両者が同じ結果にならない理由を教えてください。座標点は同じですが、色(ベクトルの長さ)が違います。見たところ、コード1が正しそうです。

xs2.txtとys2.txtは
0 1
です。

dx2.txtは
-2 3
4 -5
です。

dy2.txtは
4 -1
-3 -5
です。

ベクトル(dx2, dy2)の大きさは
4.47 3.16
5 7.07
です。

コード1

python

1import cv2 2import numpy as np 3import matplotlib.pyplot as plt 4import math 5 6path1= "dxs2.txt"7path2= "dys2.txt"8path3= "xs2.txt"9path4= "ys2.txt"10 11with open('dxs2.txt', 'r') as f:12 vx = [[*map(float, l.split())] for l in f.readlines()]13 14with open('dys2.txt', 'r') as f:15 vy = [[float(i) for i in l.split()] for l in f.readlines()]16 17with open(path3, 'r') as f:18 xs2 = f.read().split()19 20with open(path4, 'r') as f:21 ys2 = f.read().split()22 23fig, ax = plt.subplots()24plt.xlim(-5, 5)25plt.ylim(-5, 5)26plt.xticks([i for i in range(-5,6)])27plt.yticks([i for i in range(-5,6)])28ax.axhline(0, color='black', dashes=(3, 3), linewidth=0.7)29ax.axvline(0, color='black', dashes=(3, 3), linewidth=0.7)30plt.grid()31 32plt.title("code1", fontsize=15)33plt.xlabel("X", fontsize=15)34plt.ylabel("Y", fontsize=15)35plt.gca().set_aspect('equal')36 37Xnum=238Ynum=239X = [*range(0, Xnum)]40Y = [*range(0, Ynum)]41#####ここから異なる###############42norm_drs = [(vx[j][i]**2 + vy[j][i]**2) ** 0.5 for j in Y for i in X]43 44qv = plt.quiver(X, Y, vx, vy, norm_drs, 45 cmap='jet', scale=1, scale_units='xy', angles='xy')46#####異なる部分はここまで###########47plt.gcf().colorbar(qv)48qv.set_clim(0, 8)49 50saveName = "result1.png"51plt.savefig(saveName)

コード2

python

1import cv2 2import numpy as np 3import matplotlib.pyplot as plt 4import math 5 6path1= "dxs2.txt"7path2= "dys2.txt"8path3= "xs2.txt"9path4= "ys2.txt"10 11with open('dxs2.txt', 'r') as f:12 vx = [[*map(float, l.split())] for l in f.readlines()]13 14with open('dys2.txt', 'r') as f:15 vy = [[float(i) for i in l.split()] for l in f.readlines()]16 17with open(path3, 'r') as f:18 xs2 = f.read().split()19 20with open(path4, 'r') as f:21 ys2 = f.read().split()22 23fig, ax = plt.subplots()24plt.xlim(-5, 5)25plt.ylim(-5, 5)26plt.xticks([i for i in range(-5,6)])27plt.yticks([i for i in range(-5,6)])28ax.axhline(0, color='black', dashes=(3, 3), linewidth=0.7)29ax.axvline(0, color='black', dashes=(3, 3), linewidth=0.7)30plt.grid()31 32plt.title("code2", fontsize=15)33plt.xlabel("X", fontsize=15)34plt.ylabel("Y", fontsize=15)35plt.gca().set_aspect('equal')36 37Xnum=238Ynum=239X = [*range(0, Xnum)]40Y = [*range(0, Ynum)]41#####ここから異なる###############42for j in range(0,Xnum,1):43 for i in range(0,Ynum,1):44 norm_drs=math.sqrt(float(vx[j][i])**2+float(vy[j][i])**2)45 46 qv = plt.quiver(47 X[i], Y[j], float(vx[j][i]), float(vy[j][i]), norm_drs, 48 cmap="jet", scale=1, scale_units="xy", angles="xy" 49 )50#####異なる部分はここまで###########51plt.gcf().colorbar(qv)52qv.set_clim(0, 8)53 54saveName = "result2.png"55plt.savefig(saveName)56 57

試したこと

座標の位置は両者で異なっていないので、quiverの理解が不足しているかもしれません。色々ネットで調べましたが、色が異なる理由が分からなかったので教えてください。

コメントを投稿

0 コメント