Я пытаюсь выполнить ту же работу, как объяснено ЗДЕСЬ ( Создание графика гладкой поверхности из данных топографии c с использованием кода matplotlib здесь), но это не работает.
У меня есть pandas массив данных, содержащий мои значения (градуированная шкала X, градуированная шкала Y и значения).
-1500 -1200 -900 -600 -300 ... 1200 1500 1800 2100 2400
300 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN
600 NaN NaN NaN NaN NaN ... 10.100 NaN NaN NaN NaN
900 NaN NaN NaN NaN NaN ... 9.949 10.230 NaN NaN NaN
1200 NaN NaN NaN NaN NaN ... 9.854 9.934 10.380 NaN NaN
1500 NaN NaN NaN NaN NaN ... 9.783 9.870 10.070 NaN NaN
1800 NaN NaN NaN NaN NaN ... 9.657 9.886 9.917 10.190 NaN
2100 NaN NaN NaN NaN NaN ... 9.645 9.766 9.894 10.320 NaN
2400 NaN NaN NaN NaN NaN ... 9.536 9.731 9.767 9.908 10.270
2700 NaN NaN NaN NaN 9.317 ... 9.433 9.646 9.734 9.886 10.190
3000 NaN NaN NaN NaN 9.321 ... 9.285 9.488 9.616 9.834 10.010
3300 NaN NaN NaN 9.605 9.282 ... 9.263 9.373 9.548 9.713 10.010
3600 NaN NaN NaN 9.266 9.168 ... 9.325 9.352 9.506 9.630 9.810
3900 NaN NaN NaN 9.114 9.146 ... 9.197 9.237 9.450 9.609 9.753
4200 NaN NaN 9.787 9.289 8.853 ... 9.347 9.152 9.406 9.566 9.687
4500 NaN 9.673 9.587 9.231 8.815 ... 9.221 9.096 9.291 9.469 9.637
4800 NaN 9.784 9.579 9.205 8.969 ... 9.218 9.055 9.126 9.429 9.573
5100 9.74 9.645 9.384 9.190 8.936 ... 9.359 8.978 9.085 9.294 9.547
5400 9.80 9.689 9.339 9.178 9.069 ... 9.305 9.075 8.938 9.257 9.458
5478 9.96 9.710 9.336 9.238 9.074 ... 9.133 9.077 8.862 9.204 9.291
Мой первый график трисурфинга неплох, но я хочу улучшить его, используя метод первой строки !!
Вот мой код:
import os
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
# Get the data (csv file is hosted on the web)
path_result_v = pathtodata.xslx
df_v = pd.read_excel(path_result_v,header=0, index_col=0, usecols='A,G:T')
# Transform it to a long format3
dfv=df_v.unstack().reset_index().dropna()
dfv.columns=["X","Y","Z"]
fig = plt.figure()
ax = Axes3D(fig)
X = dfv['X'].to_numpy()
Y = dfv['Y'].to_numpy()
Z = dfv['Z'].to_numpy()
xi = np.linspace(X.min(),X.max(), num=50)
yi = np.linspace(Y.min(),Y.max(), num=50)
zi = griddata((X,Y), Z, (xi,yi), method='cubic')
xig, yig = np.meshgrid(xi, yi)
surf = ax.plot_surface(xig, yig, zi, cmap='gist_earth')
fig.colorbar(surf, shrink=0.5, aspect=5)
ax.set_title('Smoothed Marque verticale')
ax.set_xlabel('Windows')
ax.set_ylabel('Levels')
ax.set_zlabel('Value (mm)')
ax.set_zlim3d(0,8000)
Конечно, не работает .... Можете ли вы помочь мне, пожалуйста ??
Спасибо!
Грег