欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用python繪制二三維曲面和矢量流線圖的代碼示例

 更新時間:2023年07月13日 10:54:45   作者:一馬平川的大草原  
這篇文章主要給大家詳細介紹了如何利用python繪制二三維曲面和矢量流線圖,文中通過代碼示例介紹的非常詳細,對我們學習或工作有一定的幫助,需要的朋友可以參考下

為了實現(xiàn)不同數(shù)據(jù)的可視化,最近研究了python環(huán)境下的可視化方案,為后續(xù)的流體運動仿真模擬做好儲備,由于python處理數(shù)據(jù)的便利性,導致目前很多后端處理或者可視化成圖操作都在python中實現(xiàn),比如前端是vue,加上簡單的交互操作,后端搭建webserver,可采用java或者python來搭建,并利用python在后端處理數(shù)據(jù),形成可視化圖件等;本文主要在python3.10環(huán)境下,利用 matplotlib.pyplot、scipy.interpolate、numpy、pandas實現(xiàn)數(shù)據(jù)的處理,網(wǎng)格數(shù)據(jù)的生成,各自平面圖和三維圖形的繪制,并加入自定義顏色欄。在繪圖開始之前,需要準備數(shù)據(jù),一般包括讀取和準備數(shù)據(jù),以及簡單的數(shù)據(jù)處理過濾等,后續(xù)會在此基礎上進行繪圖操作或繼續(xù)進行數(shù)據(jù)處理及可視化等。

準備數(shù)據(jù)階段

# 準備數(shù)據(jù) 讀取數(shù)據(jù)
# 0.讀寫實際數(shù)據(jù)生成三維曲面,數(shù)據(jù)格式為x y z
filename=r'D:\project\PythonProject\ECL\data\geochemical-data\2018_T28.txt'
dataTop = pd.read_csv(filename, sep='\t', header=None, names=['x', 'y', 'z'])
# 去掉無效數(shù)據(jù),一般為-99999.0000
data = dataTop[dataTop['z'] != -99999.0000]
x = data.iloc[:, 0]
y = data.iloc[:, 1]
z = data.iloc[:, 2]*(-1) #深度值是負數(shù),要取反。
xi = np.linspace(min(x), max(x))
yi = np.linspace(min(y), max(y))
xi, yi = np.meshgrid(xi, yi) # 將一維數(shù)據(jù)處理為二維的網(wǎng)格數(shù)據(jù)
zi = griddata(data.iloc[:,0:2], z, (xi, yi), method='cubic') # 用法詳見附錄1

2018_T28.txt文件內(nèi)容

讀取后的數(shù)據(jù)樣式,xyz的shape形狀,都是相同長度的一維數(shù)組,即(12766,) (12766,) (12766,).

一、利用xyz繪制三維曲面

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_trisurf(x, y, z, color='white', edgecolors='grey', alpha=0.5) #繪制三角網(wǎng)格組成的三維曲面
ax.scatter(x, y, z, c='red')  # 繪制三維散點圖
plt.show()

利用三角網(wǎng)格繪制的三維曲面圖和三維散點圖

二、利用xyz生成網(wǎng)格后繪制三維曲面

fig = plt.figure()
# ax = plt.axes(projection='3d')
ax = fig.gca(projection='3d')
surf = ax.plot_surface(xi, yi, zi, cmap='BuPu', linewidth=0, antialiased=True)  #繪制三維曲面
# surf = ax.scatter(xi, yi, zi, cmap='BuPu', linewidth=0, antialiased=True)     #繪制三維散點圖
# surf = ax.contourf(xi, yi, zi, zdim='z',offset=0.3, cmap='BuPu')   #等高線面圖(contourf)或等高線圖(contour),要設置offset,為Z的最小值,
fig.colorbar(surf)
ax.set_title('三維圖')
ax.set_zlim3d(np.min(z), np.max(z))
plt.show()

三維曲面圖、散點圖和等值線圖

三、利用xyz實現(xiàn)三維等值線繪制,降雨量三維等值線圖

filename = r'D:\project\PythonProject\ECL\data\geochemical-data\0.txt'  # 數(shù)據(jù)文件地址,附件1
df = pd.read_csv(filename, sep="\t")  # 讀取文件
df1 = df["1"]  # 讀取第一列數(shù)據(jù)
df2 = df['2']  # 讀取第二列數(shù)據(jù)
df3 = df['3']  # 讀取第三列數(shù)據(jù)
odf1 = np.linspace(100, 1900, 50)  # 設置網(wǎng)格經(jīng)度
odf2 = np.linspace(10, 600, 50)  # 設置網(wǎng)格緯度
odf1, odf2 = np.meshgrid(odf1, odf2)  # 網(wǎng)格化,生成網(wǎng)絡,生成網(wǎng)格形狀是第一個維度對應odf1,第二個維度對應odf2
func = Rbf(df1, df2,df3, function='linear')  # 定義插值函數(shù)plt.cm.hot
odf3_new = func(odf1, odf2)  # 獲得插值后的網(wǎng)格累計降水量
fig = plt.figure(figsize=(12, 7))
ax1 = plt.axes(projection='3d')  # 創(chuàng)建三維坐標軸
ax1.plot_surface(odf1, odf2, odf3_new,alpha=0.3,cmap='rainbow') #繪制三維曲面,alpha-控制透明度,cmap-控制顏色
# 繪制z方向投影填充圖,等高線面圖,投到x-y平面,offset為z最小值。
cs=plt.contourf(odf1, odf2, odf3_new,zdir='z',offset=0,
             levels=np.arange(odf3_new.min(), odf3_new.max(), (odf3_new.max() - odf3_new.min()) / 10), cmap='GnBu',
             extend='both')  # 畫圖
# 繪制等高線圖
line = plt.contour(odf1, odf2, odf3_new,zdir='z',offset=0,cmap="rainbow",levels=np.arange(odf3_new.min(), odf3_new.max(), (odf3_new.max() - odf3_new.min()) / 10))
plt.clabel(line, inline=True, fontsize=12)
ax1.set_title('降雨量三維等值線圖')
plt.colorbar(cs)
plt.show()

效果圖和數(shù)據(jù)格式

四、繪制二維等值線

# 繪制二維等值線
levels = np.linspace(np.min(z), np.max(z), 50)
fig, ax = plt.subplots(figsize=(8, 6))
# # 1.設置顏色條  第一種方式
# print(cm.colors.cnames)
# 默認顏色標如 jet,coolwarm,gnuplot2_r,RdBu_r,PuBuGn_r,ocean_r,輸入的顏色名稱錯誤時,會自動輸出色標的列表
cmap = cm.get_cmap('seismic_r')
# cmap = cm.get_cmap('jet', 10)  # 將色條分成10截
norm = cm.colors.Normalize(vmin=np.min(z), vmax=np.max(z))  # 設置色條表示的數(shù)值范圍
im1 = cm.ScalarMappable(norm=norm, cmap=cmap)               # 設置映射很重要
# # 繪制顏色條(left, bottom, width, height)--表示figure的百分比,從figure 從橫向92%,縱向10%的位置開始繪制, 寬是figure的3%,高是figure的78%,
ax9 = fig.add_axes([0.92, 0.1, 0.03, 0.78])
cb = plt.colorbar(im1, cax=ax9, orientation='vertical', extend='neither') #縱向繪制,兩端無箭頭
# ticks與norm對應
# # cb = plt.colorbar(im1, cax=ax9, orientation='horizontal', extend='max', ticks=np.linspace(1900,2600, 51))
# cs = ax.contour(xi, yi, zi, levels=levels, cmap=cmap)         # 不存在顏色間隔分段,并指定顏色條
# cs = ax.contour(xi, yi, zi, levels=levels,cmap='coolwarm')  # 存在顏色間隔分段
cs = ax.contourf(xi, yi, zi, levels=levels,cmap='jet',extend='neither') # 等值線填充
ax.clabel(cs, inline=True, fontsize=6)
ax.set_title('等高線圖')
plt.show()
# # 2.設置顏色條 第二種方式
# cs = ax.contourf(xi, yi, zi, levels=levels, cmap='jet', extend='neither')  # 等值線填充,存在顏色間隔分段
# # ax.clabel(cs, inline=True, fontsize=6)
# ax.set_title('等高線圖')
# plt.colorbar(cs)
# plt.show()

兩種二維等值線圖

五、繪制矢量流線圖

# 1.矢量場流線圖 樣例
# 0:5表示數(shù)組中數(shù)值所在的區(qū)間。100j表示劃分的密度,值越大,圖片越清晰
Y1, X1 = np.mgrid[-5:5:1000j, -5:5:10j]
# (X,Y)是一維numpy數(shù)組的等距網(wǎng)格,(U,V)參數(shù)匹配的是(X,Y)速率的二維numpy數(shù)組
# U,V矩陣在維度上的行數(shù)必須等于Y的長度,列的數(shù)量必須匹配X的長度
U = -1 - X1 ** 2 + Y1
V = 1 + X1 - Y1 ** 2
# 可視化矢量場
# 矢量場中的種子點坐標
seed_points = np.array([[-2, -1, 0, 1, 2, -1], [-2, -1, 0, 1, 2, 2]]) # 種子點
# cs=plt.streamplot(X1, Y1, U, V,density=[0.5,1],color=U,cmap="autumn",linewidth=1,start_points=seed_points.T)
cs = plt.streamplot(X1, Y1, U, V, color=U, cmap="Accent", linewidth=1)
# plt.plot(seed_points[0], seed_points[1], "+", color="g") # 繪制折線圖,使用marker屬性標記
plt.colorbar()
plt.show()
# 2.用實際數(shù)據(jù)進行繪制,UV如何計算得到,要根據(jù)不同的目的進行計算。
U,V=vectorComputeUV(xi,yi,zi)
cs = plt.streamplot(xi, yi, U, V, color=U, cmap="Accent", linewidth=1)
# cs = plt.quiver(xi, yi, U, V)
plt.colorbar()
plt.show()
# 計算矢量場的速度矢量
def vectorComputeUV(xi,yi,zi):
    # U = np.log10((xi/10000)) - zi/1000
    # V = 1 + np.log10(yi/100000) - (zi/1000) ** 3
    U = -1 - (xi/10000) ** 2 + (yi/100000)
    V = 1 + (xi/10000)  - (yi/100000) ** 2
    return U,V

示例效果圖和實際數(shù)據(jù)案例圖

附錄

1.scipy.interpolate.griddata參數(shù)說明

scipy.interpolate.griddata的參數(shù)說明如下
插入非結(jié)構化D-D 數(shù)據(jù)
    points: 具有形狀 (n, D) 的浮點數(shù)的二維 ndarray,或具有形狀 (n,) 的一維 ndarray 的長度 D 元組。
    數(shù)據(jù)點坐標。
    values: 浮點數(shù)或復數(shù)的ndarray,形狀(n,)
    數(shù)據(jù)值。
    xi: 具有形狀 (m, D) 或長度為 D 的 ndarray 元組的二維 ndarray 可廣播到相同形狀。
    插入數(shù)據(jù)的點。
    method: {‘linear’, ‘nearest’, ‘cubic’},可選
    插值方法。之一
    fill_value: 浮點數(shù),可選
    用于填充輸入點凸包之外的請求點的值。如果未提供,則默認值為 nan 。此選項對‘nearest’ 方法無效。
    rescale: 布爾型,可選
    在執(zhí)行插值之前將點重新縮放到單位立方體。如果某些輸入維度具有不可比較的單位并且相差許多數(shù)量級,這將很有用。
返回
    ndarray
    插值數(shù)組。

2.streamplot()參數(shù)說明

matplotlib.pyplot.streamplot()參數(shù)說明如下:
  x,y:表示間距均勻的網(wǎng)格數(shù)據(jù)。
  u,v:表示(x, y)速率的二維數(shù)組。
  density:表示流線的密度,默認為1。
   color:表示流線顏色。一般設置為U
   cmap:表示線條顏色系,一般有'Accent', 'Accent_r', 'Blues', 'Blues_r', 'BrBG', 'BrBG_r', 'BuGn', 'BuGn_r', 'BuPu', 'BuPu_r', 'CMRmap', 'CMRmap_r', 'Dark2', 'Dark2_r', 'GnBu', 'GnBu_r', 'Greens'
  linewidth:表示流線的寬度。
  arrowsize:表示箭頭的大小。
  arrowstyle:表示箭頭的類型。
  minlength:表示流線的最小長度。
  maxlength:表示流線的最大長度。

以上就是利用python繪制二三維曲面和矢量流線圖的詳細內(nèi)容,更多關于python二三維曲面和矢量流線圖的資料請關注腳本之家其它相關文章!

相關文章

  • selenium+python實現(xiàn)基本自動化測試的示例代碼

    selenium+python實現(xiàn)基本自動化測試的示例代碼

    這篇文章主要介紹了selenium+python實現(xiàn)基本自動化測試的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 關于Python正則表達式 findall函數(shù)問題詳解

    關于Python正則表達式 findall函數(shù)問題詳解

    在寫正則表達式的時候總會遇到不少的問題,本文講述了Python正則表達式中 findall()函數(shù)和多個表達式元組相遇的時候會出現(xiàn)的問題
    2018-03-03
  • Python3爬蟲關于識別點觸點選驗證碼的實例講解

    Python3爬蟲關于識別點觸點選驗證碼的實例講解

    在本篇文章里小編給大家整理了關于Python3爬蟲關于識別點觸點選驗證碼的實例講解內(nèi)容,需要的朋友們可以參考下。
    2020-07-07
  • 更新修改后的Python模塊方法

    更新修改后的Python模塊方法

    在本篇內(nèi)容中我們給大家整理了關于如何更新修改后的Python模塊的具體步驟和方法,有興趣的朋友們學習下。
    2019-03-03
  • Django框架中表單的用法

    Django框架中表單的用法

    這篇文章介紹了Django框架中表單的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Python基礎之列表常見操作經(jīng)典實例詳解

    Python基礎之列表常見操作經(jīng)典實例詳解

    這篇文章主要介紹了Python基礎之列表常見操作,結(jié)合實例形式詳細分析了Python列表創(chuàng)建方式、內(nèi)置函數(shù)與相關使用技巧,需要的朋友可以參考下
    2020-02-02
  • Python基礎學習之類與實例基本用法與注意事項詳解

    Python基礎學習之類與實例基本用法與注意事項詳解

    這篇文章主要介紹了Python基礎學習之類與實例基本用法與注意事項,結(jié)合實例形式詳細分析了Python面相對象程序設計中關于類的定義與實例化對象相關操作技巧與注意事項,需要的朋友可以參考下
    2019-06-06
  • Python中os模塊的12種用法總結(jié)

    Python中os模塊的12種用法總結(jié)

    OS?(?Operating?System?操作系統(tǒng)?)?操作系統(tǒng)模塊;它是屬于python的標準庫,常用于處理文件和目錄(文件夾)的操作。本文為大家總結(jié)了這個模塊的12種用法,希望有所幫助
    2022-08-08
  • django 控制頁面跳轉(zhuǎn)的例子

    django 控制頁面跳轉(zhuǎn)的例子

    今天小編就為大家分享一篇django 控制頁面跳轉(zhuǎn)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python中Django與Echarts的結(jié)合用法圖文詳解

    Python中Django與Echarts的結(jié)合用法圖文詳解

    ECharts是一個第三方控件,下面這篇文章主要給大家介紹了關于Python中Django與Echarts的結(jié)合用法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-10-10

最新評論