Как сгладить поверхность путем интерполяции данных с pandas кадра данных на python? - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь выполнить ту же работу, как объяснено ЗДЕСЬ ( Создание графика гладкой поверхности из данных топографии 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)

Конечно, не работает .... Можете ли вы помочь мне, пожалуйста ??

Спасибо!

Грег

...