簡體   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