[英]Create 2D Contour Plot
好的,我在這里全然不知所措。 我想我正在嘗試構建2D輪廓圖。 我不確定這是否是我實際上試圖構建的地塊的名稱。 我有一張我要構造的圖片的附件
我發現了一些有用的問題和有關構建此類圖的指南( Python:3個列表中的2d等高線圖 , https ://matplotlib.org/api/_as_gen/matplotlib.pyplot.contour.html )是我遇到的問題就是一切都需要您的x和y軸具有相同數量的數據點。 但是,我的x軸列表具有26個值,而我的y軸列表具有1024個值。 表示每個相應數據點需要什么顏色的列表長26 * 1024 = 26624個數據點。
我將嘗試解釋描述情節的數據如何工作,但是以防萬一,如果我做得不好,我還將附上示例數據。 基本上,它列出一個x值1024次。 每次列出x值時,都會列出相應的y和z值。 然后它將移至下一個x值。
例如:
x = np.array([0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4])
y = np.array([0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1)]
color_map = random.sample(xrange(10), 25)
我提取數據沒有問題,只是在提取數據后知道如何處理數據
FLR = np.genfromtxt("C:\\Users\\Downloads\\Python\\aupnipam_scan41_3DFLR(1).txt")
x = FLR[:,][:,0]
y = FLR[:,][:,1]
z = FLR[:,][:,2]
請幫忙!
我相信您正在尋找的是matplotlib中的此功能
pcolormesh(x, y, z)
解決問題的最佳方法是遵循此頁面上包含的腳本。
您可以共享一種可以復制的格式的數據嗎? 我可以共享一個與您的數據一起使用的代碼段,以便進一步澄清。
不需要沿兩個軸具有相同數量的數據。 同
x = np.array([0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4])
y = np.array([0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1,
0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1)]
您有nx = 5
不同的x值和ny = 5
不同的y值,但同樣可以有不同數量的值。 唯一的要求是您要么
與這兩個數字的乘積一樣多的z值,在這種情況下為25
z = np.random.rand(nx*ny)
在這種情況下,與每個數字的乘積除以1的z值一樣多。
z = np.random.rand((nx-1)*(ny-1))
取決於要在網格邊緣還是在中心邊緣定義值。
在這種情況下,似乎第一種情況適用。
因此,您只需將數據重塑為2D數組(在這種情況下,將其轉置,因為x值沿着第二個數組維)。
nx = 5
ny = 5
Z = z.reshape(ny, nx).T
最后,您可以使用imshow
對其進行imshow
。 然后,棘手的部分是設置正確的圖像范圍,因為圖像邊緣不在中心像素位置,而是向右或向左移動了一半像素寬度。
extent = [x.min()-np.diff(x)[0]/2.,x.max()+np.diff(x)[0]/2.,
y.min()-np.diff(y)[0]/2.,y.max()+np.diff(y)[0]/2.,]
plt.imshow(Z, extent=extent, aspect="auto")
plt.show()
繪制不規則數據輪廓的另一種方法:
import numpy as np
from scipy.interpolate import griddata
x = np.array([0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4])
y = np.array([0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1])
z = np.random.rand(25)
xi = np.linspace(min(x),max(x),100)
yi = np.linspace(min(y),max(y),100)
zi = griddata((x,y),z,(xi[None:,],yi[:,None]),method='linear',fill_value=0.0)
plt.contourf(xi,yi,zi)
plt.colorbar()
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.