簡體   English   中英

創建2D輪廓圖

[英]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]

請幫忙!

我認為是2D等高線圖

我的數據示例

我相信您正在尋找的是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM