matplotlib 的奇怪绘图表面
strange plot surface of matplotlib
我正在尝试生成一个 3D 高度图,我有一个规则的网格,传感器收集的高度数据和数据存储在一个名为“data.txt”的文件中。数据每行存储一个数据。 file link on 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()
the image
不知道怎么回事,太奇怪了!我应该平滑它吗?
您需要使用之前定义的 xx
和 yy
并将 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()
我正在尝试生成一个 3D 高度图,我有一个规则的网格,传感器收集的高度数据和数据存储在一个名为“data.txt”的文件中。数据每行存储一个数据。 file link on 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()
the image
不知道怎么回事,太奇怪了!我应该平滑它吗?
您需要使用之前定义的 xx
和 yy
并将 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()