繁体   English   中英

使用2D数组的Python中的颤动图

[英]quiver plot in Python using 2D arrays

嗨,我正在尝试使用颤动图来创建矢量场图。 这是我的逻辑和方法,我首先通过np.arange创建位置的x,y坐标,并使用0.1的步长。 然后我将网格划分为x,y。 然后,我将函数Fx的x组件和y组件Fy作为.dat文件导入python。 .dat文件是每个2D数组(只是一个正方形矩阵)。 然后,对网格化的x,y坐标和Fx,Fy 2d数组使用quiver命令。 但是,按照我的预期,颤动图输出根本没有任何意义。

我忽略的代码有问题吗? 如果步长不是整数,np.arange是否有效? 我打印了所有数组以手动检查数据,一切似乎都很好。

难道我的四个2D阵列都没有相同的形状吗? 我导入的两个.dat文件均为40x40正方形矩阵。 不知道这是否与我划分的网格相匹配。

除此之外,我不确定是什么问题。 任何帮助或建议,将不胜感激。 如果有帮助,我可以将数据添加到.dat文件中。 谢谢! (我已经检查了堆栈溢出的所有其他示例以解决此问题,并且看来我的代码在逻辑上是正确的,所以我非常困惑)

import numpy as np
import matplotlib.pyplot as plt

data = np.genfromtxt('file1.dat')
data2 = np.genfromtxt('file2.dat')

nx = 2
ny = 2
x=np.arange(-nx,nx,0.1)
y=np.arange(-ny,ny,0.1)
xi,yi=np.meshgrid(x,y)
Fx = data[::5] #picks out every 5 rows in the matrix
Fy = data2[::5] 
#print(Fx)
#print(Fy)
#print(xi)
#print(yi)

plt.axes([0.065, 0.065, 0.9, 0.9])
plt.quiver(xi,yi,Fx,Fy, alpha=.5)
plt.quiver(xi,yi,Fx,Fy, edgecolor='k',facecolor='none', linewidth=.5)

plt.show()

编辑:.dat文件如下。 如果有一种方法可以导入.dat文件,请告诉我,我意识到这是很多数字,而且格式可怕。 首先列出Fx,然后列出Fy数组。 我期望有一个很好的颤动图,其中有某种圆形图案/圆形流。 箭头应全部形成顺时针和/或逆时针方向的流。

  -30.9032192      0.512708426      0.511251688      0.508112907      0.503038108      0.495766401      0.486015081      0.473499298      0.457935333      0.439051390      0.416606665      0.390406251      0.360321403      0.326310992      0.288441181      0.246901810      0.202013552      0.154238343      0.104165822       5.24933599E-02   0.00000000      -5.24933599E-02 -0.104165822     -0.154238343     -0.202013552     -0.246901810     -0.288441181     -0.326310992     -0.360321403     -0.390406251     -0.416606665     -0.439051390     -0.457935333     -0.473499298     -0.486015081     -0.495766401     -0.503038108     -0.508112907     -0.511251688     -0.512708426       30.9032192    

  0.640149713      0.648661256      0.646115780      0.638335168      -13.4731970      -13.0613079      0.587181866      0.561966598      0.533295572      0.501472771      0.466741979      0.429292738      0.389282435      0.346857786      0.302170664      0.255400449      0.206771404      0.156560570      0.105099753       5.27719632E-02   2.10129052E-08  -5.27718328E-02 -0.105099864     -0.156560570     -0.206771582     -0.255400449     -0.302170008     -0.346857607     -0.389282405     -0.429292321     -0.466741502     -0.501472294     -0.533295095     -0.561966538     -0.587181747       13.0613060       13.4731960     -0.638335109     -0.646115661     -0.648661256     -0.640149713    

  0.799892545      0.824215114      0.801061392      0.776797950      0.753669202      0.730814993      0.707295001      0.682291210      0.655105412      -8.68122292      -8.12608242      0.554765701      0.513439834      0.467435867      0.416336209      0.359773695      0.297508597      0.229575798      0.156477526       7.93530941E-02   6.53175791E-10  -7.93530941E-02 -0.156477645     -0.229576021     -0.297508597     -0.359773695     -0.416336179     -0.467435598     -0.513440192     -0.554765582       8.12608242       8.68122387     -0.655105233     -0.682291508     -0.707294881     -0.730815291     -0.753669143     -0.776797950     -0.801061392     -0.824215114     -0.799892545    

  0.940612555      0.983826339      0.933131218      0.884394646      0.842061043      0.804476202      0.769944012      0.737089813      0.704840183      0.672395170      0.639202237      0.604933023      0.569452882      0.532750905      0.494812310      -2.68859553      -2.16188312      0.365726620      0.304749787      0.205249593       6.78142031E-09 -0.205249622     -0.304749817     -0.365726680       2.16188359       2.68859553     -0.494812399     -0.532750905     -0.569453001     -0.604932964     -0.639202118     -0.672395170     -0.704840362     -0.737089515     -0.769943893     -0.804476202     -0.842061162     -0.884394407     -0.933131695     -0.983826339     -0.940612555    

  0.999167860       1.05166125      0.986028075      0.923735499      0.870001256      0.822448075      0.778727889      0.736939847      0.695574820      0.653458953      0.609715879      0.563743949      0.515199065      0.463976830      0.410177410      0.354019582      0.295616359      0.234412342      0.167968050       9.07804966E-02  -8.54922577E-10  -9.07804891E-02 -0.167968005     -0.234412268     -0.295616418     -0.354019672     -0.410177410     -0.463976830     -0.515199006     -0.563743949     -0.609715819     -0.653458893     -0.695574880     -0.736939907     -0.778727889     -0.822448075     -0.870001316     -0.923735559     -0.986028075      -1.05166125     -0.999167860    


  0.940612555      0.983826339      0.932870448      0.884094179      0.841758013      0.804004610      0.768958390      0.735091329      0.701199591      0.666386902      0.630052805      0.591893077      0.551910400      0.510422051      0.468044579      0.425626040      0.384017974      0.343483299      0.302600116     -0.377980769       8.43500270E-10  0.377980769     -0.302600116     -0.343483359     -0.384017944     -0.425625950     -0.468044549     -0.510422230     -0.551910520     -0.591892898     -0.630052805     -0.666386902     -0.701199770     -0.735090971     -0.768958986     -0.804005086     -0.841758251     -0.884094059     -0.932870448     -0.983826339     -0.940612555    


 0.799892545      0.824215114      0.807587028      0.790868759      0.775763810      0.761242151      0.746228993      0.729784787      0.711097538      0.689466000      0.664264023      -6.33222771      -5.70436525      0.561126649      0.514991641      0.460934460      0.396892428      0.320130050      0.227872163      0.119494393      -1.02303694E-08 -0.119494416     -0.227872089     -0.320129842     -0.396892160     -0.460934043     -0.514991641     -0.561126769       5.70436525       6.33222771     -0.664264023     -0.689466000     -0.711097836     -0.729784369     -0.746228993     -0.761242330     -0.775764227     -0.790868759     -0.807587445     -0.824215114     -0.799892545 

  0.640149713      0.648661256      0.658376634      0.663496077      0.663335323      -12.7135134      -12.2490902      0.630356669      0.608760655      0.581994295      0.550120413      0.513214111      0.471384048      0.424800932      0.373717010      0.318486720      0.259573966      0.197552294      0.133099481       6.69753179E-02  -1.07370708E-08  -6.69753179E-02 -0.133099481     -0.197552368     -0.259573698     -0.318486512     -0.373717397     -0.424800485     -0.471384078     -0.513214111     -0.550120771     -0.581994355     -0.608760655     -0.630356669       12.2490902       12.7135134     -0.663335383     -0.663496077     -0.658376753     -0.648661256     -0.640149713    

 -30.9032192      0.512708426      0.511251688      0.508112907      0.503038108      0.495766401      0.486015081      0.473499298      0.457935333      0.439051390      0.416606665      0.390406251      0.360321403      0.326310992      0.288441181      0.246901810      0.202013552      0.154238343      0.104165822       5.24933599E-02   0.00000000      -5.24933599E-02 -0.104165822     -0.154238343     -0.202013552     -0.246901810     -0.288441181     -0.326310992     -0.360321403     -0.390406251     -0.416606665     -0.439051390     -0.457935333     -0.473499298     -0.486015081     -0.495766401     -0.503038108     -0.508112907     -0.511251688     -0.512708426       30.9032192   

现在Fy数组:

 -0.205083355     -0.525830388     -0.552687049     -0.580741763     -0.609929502     -0.640149713     -0.671258569     -0.703064799     -0.735320449     -0.767719150     -0.799892545     -0.831412077     -0.861791074     -0.890495777     -0.916961849     -0.940612555     -0.960886896     -0.977269113     -0.989315629     -0.996686459     -0.999167860     -0.996686459     -0.989315629     -0.977269113     -0.960886896     -0.940612555     -0.916961849     -0.890495777     -0.861791074     -0.831412077     -0.799892545     -0.767719150     -0.735320449     -0.703064799     -0.671258569     -0.640149713     -0.609929502     -0.580741763     -0.552687049     -0.525830388     -0.205083355    
 -0.495766401     -0.496165156     -0.509083092     -0.549605310       13.5129404       13.0519953     -0.646288395     -0.672055602     -0.695797563     -0.717920899     -0.738660455     -0.758110344     -0.776252687     -0.792979062     -0.808119476     -0.821464479     -0.832787395     -0.841867268     -0.848508835     -0.852558434     -0.853919387     -0.852558374     -0.848508716     -0.841867328     -0.832787514     -0.821464896     -0.808119833     -0.792978704     -0.776252151     -0.758110642     -0.738660395     -0.717920780     -0.695797503     -0.672055602     -0.646288335       13.0519953       13.5129395     -0.549605191     -0.509083092     -0.496165156     -0.495766401    

 -0.416606665     -0.387658477     -0.370003909     -0.412325561     -0.451486528     -0.484789789     -0.512974977     -0.536900580     -0.557342112       8.73137856       8.12754345     -0.604040861     -0.616312325     -0.627466083     -0.637651145     -0.646887839     -0.655064702     -0.661947429     -0.667217672     -0.670547307     -0.671688557     -0.670547426     -0.667217493     -0.661947429     -0.655064702     -0.646887779     -0.637651086     -0.627466381     -0.616312623     -0.604041040       8.12754345       8.73137951     -0.557341993     -0.536900103     -0.512975276     -0.484789670     -0.451485991     -0.412325561     -0.370003909     -0.387658477     -0.416606665   

 -0.246901810     -0.228335708     -0.217398927     -0.246074528     -0.271431714     -0.291785061     -0.307664692     -0.319617361     -0.328106791     -0.333535194     -0.336277753     -0.336733580     -0.335400879     -0.333002120     -0.330682963       2.81363893       2.24033999     -0.348281264     -0.372185618     -0.395866930     -0.403591305     -0.395866960     -0.372185677     -0.348281264       2.24033999       2.81363893     -0.330682874     -0.333002120     -0.335400909     -0.336733490     -0.336277664     -0.333535045     -0.328106642     -0.319617361     -0.307664692     -0.291785270     -0.271431714     -0.246074289     -0.217398927     -0.228335708     -0.246901810    
   0.00000000      -3.97699699E-02  -8.22334886E-02  -9.01840925E-02  -9.43243951E-02  -9.68469381E-02  -9.79287177E-02  -9.75681171E-02  -9.57226083E-02  -9.23085213E-02  -8.71856511E-02  -8.01347122E-02  -7.08276853E-02  -5.87978214E-02  -4.34263758E-02  -2.40071025E-02  -4.12676527E-05   2.79203784E-02   5.66387177E-02   7.90976062E-02   8.76100808E-02   7.90975988E-02   5.66387326E-02   2.79204026E-02  -4.12871887E-05  -2.40071043E-02  -4.34263758E-02  -5.87978400E-02  -7.08276406E-02  -8.01346377E-02  -8.71856511E-02  -9.23085883E-02  -9.57226381E-02  -9.75680798E-02  -9.79286432E-02  -9.68469679E-02  -9.43244398E-02  -9.01841149E-02  -8.22335258E-02  -3.97699960E-02   0.00000000    

 0.246901810      0.149554759       5.41899577E-02   6.69130459E-02   8.30149651E-02   9.62892994E-02  0.106718197      0.114569001      0.119987577      0.122970015      0.123354375      0.120809816      0.114815064      0.104622498       8.91864598E-02   6.69886991E-02   3.55363674E-02  -1.02187870E-02  -8.21609423E-02 -0.177876130     -0.191068053     -0.177876085      -8.21608678E-02  -1.02187609E-02   3.55363339E-02   6.69886544E-02   8.91865119E-02  0.104622573      0.114814982      0.120810024      0.123354279      0.122969493      0.119987287      0.114568666      0.106718197       9.62890834E-02   8.30147490E-02   6.69130459E-02   5.41902333E-02  0.149555355      0.246901810    

 0.416606665      0.324635506      0.239433557      0.271107137      0.304715306      0.333829224      0.358776420      0.380251735      0.398895025      0.415270001      0.429880798      -6.52393579      -5.84947205      0.467720896      0.479777455      0.492111117      0.504699171      0.516976655      0.527697802      0.535157621      0.537844956      0.535157681      0.527697802      0.516976714      0.504699290      0.492111027      0.479777277      0.467720628      -5.84947205      -6.52393579      0.429880500      0.415270001      0.398895413      0.380252063      0.358776003      0.333829224      0.304715246      0.271106362      0.239433587      0.324635804      0.416606665    

 0.495766401      0.468931794      0.452914894      0.491556555      0.528390408      -12.8101072      -12.3052654      0.617275119      0.641844690      0.664552093      0.685565233      0.704941750      0.722658634      0.738638997      0.752775729      0.764953554      0.775063336      0.783014059      0.788738489      0.792190075      0.793342948      0.792190075      0.788738668      0.783013999      0.775063157      0.764953852      0.752775729      0.738638759      0.722658694      0.704941571      0.685565174      0.664552152      0.641844690      0.617275119      -12.3052645      -12.8101072      0.528390408      0.491556555      0.452914953      0.468931794      0.495766401  

0.512708426      0.525830388      0.552687049      0.580741763      0.609929502      0.640149713      0.671258569      0.703064799      0.735320449      0.767719150      0.799892545      0.831412077      0.861791074      0.890495777      0.916961849      0.940612555      0.960886896      0.977269113      0.989315629      0.996686459      0.999167860      0.996686459      0.989315629      0.977269113      0.960886896      0.940612555      0.916961849      0.890495777      0.861791074      0.831412077      0.799892545      0.767719150      0.735320449      0.703064799      0.671258569      0.640149713      0.609929502      0.580741763      0.552687049      0.525830388      0.512708426   

沿y=xy=-x线似乎有异常大的值(可能表示渐近奇异性?)。

您可以在发布的数据中看到这一点。 考虑第一行:

  -31.3490391       6.68895245E-02   6.68859407E-02   ... -6.68895245E-02   31.3490391    

第一个值是大数和负数,然后是小数和正数。 在行尾附近,数字较小且为负,而最后一个值较大且为正。 显然,就目前情况而言,该数据不会产生平滑变化的颤动图。

如果我们删除这些异常大的值:

data[np.abs(data) > 1] = np.nan
data2[np.abs(data2) > 1] = np.nan

然后

import numpy as np
import matplotlib.pyplot as plt

data = np.genfromtxt('file1.dat')
data2 = np.genfromtxt('file2.dat')

data[np.abs(data) > 1] = np.nan
data2[np.abs(data2) > 1] = np.nan

N = 10
Fx = data[::N, ::N]
Fy = data2[::N, ::N]

nrows, ncols = Fx.shape
nx = 2
ny = 2
x = np.linspace(-nx, nx, ncols)
y = np.linspace(-ny, ny, nrows)
xi, yi = np.meshgrid(x, y, indexing='ij')

plt.axes([0.065, 0.065, 0.9, 0.9])
plt.quiver(xi, yi, Fx, Fy, alpha=.5)
plt.quiver(xi, yi, Fx, Fy, edgecolor='k', facecolor='none', linewidth=.5)

plt.show()

产量

在此处输入图片说明


data是形状为(301、301)的2D数组:

In [109]: data.shape
Out[109]: (301, 301)

如果我们使用data[::10]切片data则结果具有形状

In [113]: data[::10].shape
Out[113]: (31, 301)

注意,只有第一个轴被切片。 要切片第一轴和第二轴,请使用data[::10, ::10]

In [114]: data[::10, ::10].shape
Out[114]: (31, 31)

有关多维切片的更多信息,请参阅文档 始终注意NumPy数组的形状。 这通常是理解NumPy操作的关键。


尽管plt.quiver有时可以接受不同形状的数组,但是通过传递四个相同形状的数组来使用plt.quiver是最容易的。 为了确保xi, yi, Fx, Fy全部具有相同的形状,切片datadata2 ,以形成FxFy 第一 ,然后生成xiyi符合的(共同的)形状FxFy

nrows, ncols = Fx.shape
x = np.linspace(-nx, nx, ncols)
y = np.linspace(-ny, ny, nrows)

np.linspace的第三个参数指示返回数组中的元素数。

首先,确保FxFy的尺寸相同,以免造成混淆。 然后根据数据维度生成网格空间维度。 您可以使用np.linspace代替np.arange

x = np.linspace(-nx, nx, Fx.shape[1])
y = np.linspace(-ny, ny, Fx.shape[0])

更新 :完整的代码如下:

import numpy as np
import matplotlib.pyplot as plt

# Fxdata.dat contain Fx data while Fydata.dat is Fy downloaded from the provided link
Fx = np.genfromtxt('Fxdata.dat')
Fy = np.genfromtxt('Fydata.dat')

# input data dimensions 
num_Fx = Fx.shape[0]    # number of lines for the data in file1.dat
length_Fx = Fx.shape[1]  # length of each row for file1.dat 

nx = 15
ny = 15

# you can generate the grid points based on the dimensions of the input data
x = np.linspace(-nx, nx, length_Fx)
y = np.linspace(-ny, ny, num_Fx)

# grid points 
xi,yi=np.meshgrid(x,y)

#
plt.axes([0.065, 0.065, 0.9, 0.9])
plt.quiver(xi,yi,Fx,Fy, alpha=.5)
#plt.quiver(xi,yi,Fx,Fy, edgecolor='k',facecolor='none', linewidth=.5)

plt.show()

不确定现在是否有意义,但是生成的图看起来像:

图片使用完整数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM