簡體   English   中英

matplotlib 奇怪的繪圖表面

[英]strange plot surface of matplotlib

我正在嘗試生成一個 3D 高度圖,我有一個規則網格,傳感器收集的高度數據和數據存儲在一個名為“data.txt”的文件中。 數據每行存儲一個數據。 github上的文件鏈接

import numpy as np
import matplotlib.pyplot as pit

from mpl_toolkits.mplot3d import Axes3D
from scipy.stats import multivariate_normal
from matplotlib import cm

x = np.linspace(0,350,18)
y = np.linspace(0,350,15)
z = np.loadtxt('data.txt')

xx,yy = np.meshgrid(x,y)
fig = pit.figure()
ax = fig.add_subplot(111,projection='3d')
ax.scatter(xx,yy,z)

使用上面的代碼,我得到了一個分散。 這看起來不錯的樣子! 我發現了這個,我想將圖形轉換為表面,而不是添加下面的代碼,但看起來很奇怪

xa = np.reshape(xx, (18,15))
ya = np.reshape(yy, (18,15))
za = np.reshape(z, (18,15))
surf=ax.plot_surface(xa,ya,za,cmap="summer",linewidth=0,antialiased=False, alpha=0.5)
fig.colorbar(surf)
pit.show()

圖片

我不知道發生了什么,看起來太奇怪了! 我應該平滑它嗎?

您需要使用前面定義的xxyy並將z重塑為與xx相同的形狀:

za = z.reshape(xx.shape)
fig = pit.figure()
ax = fig.add_subplot(111,projection='3d')
surf=ax.plot_surface(xx,yy,za,cmap="summer",linewidth=0,antialiased=False, alpha=0.5)
fig.colorbar(surf)
pit.show()

請注意,為了更清楚,我已經旋轉了圖表。

在此處輸入圖像描述

我認為你需要 scipy.griddata。 試試這個代碼:

from scipy.interpolate import griddata
za = griddata(x, y, z, (xx, yy), method='linear')
surf=ax.plot_surface(xx,yy,za,cmap="summer",linewidth=0,antialiased=False, alpha=0.5)
fig.colorbar(surf)
plt.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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