使用2D数组在Python中绘制颤动图

时间:2016-11-01 18:15:03

标签: python matplotlib

您好我正在尝试使用箭袋图来创建矢量场图。这是我的逻辑和方法,我首先通过np.arange创建位置的x,y坐标,并使用步长0.1。然后我将网格网格化为x,y。然后我将函数Fx的x组件和y组件Fy导入到python中作为.dat文件。 .dat文件是每个2D数组(只是一个方形矩阵)。然后我使用quiver命令获取网格x,y坐标和Fx,Fy 2d数组。然而,根据我的预期,颤动情节输出根本没有多大意义。

我的代码是否存在问题?如果步长不是整数,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   

2 个答案:

答案 0 :(得分:2)

y=xy=-x行似乎有非常大的值(可能表示渐近奇点?)。

您可以在发布的the data中看到这一点。例如,考虑第一行:

  -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()

产量

enter image description here

data是形状的二维数组(301,301):

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

如果我们使用datadata[::10]进行切片,则结果会有形状

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

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

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

有关多维切片的更多信息,请参阅the docs。 始终注意NumPy阵列的形状。这通常是理解NumPy操作的关键。

虽然plt.quiver有时可以接受不同形状的数组, 通过传递四个相同形状的数组,最简单的方法是使用plt.quiver。 为确保xi, yi, Fx, Fy具有相同的形状,请将datadata2切片以形成FxFy 首先,然后构建xiyi以符合Fx的{​​{1}}的(常见)形状:

Fy

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

答案 1 :(得分:1)

首先确保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()

现在不确定它是否有意义,但结果情节如下:

Picture using the full data