I am a newbie to plotly and I have a basic question of how to do a 3D surface plot. I have raw data in the form of 3 vectors X [ ], Y [ ], Z [ ]. I want to plot Z surface as function of X and Y. I am using python. I looked into the tutorial (https://plot.ly/python/3d-surface-plots/) but of no use since the input data structure is different to my case. Should I need to change the data structure or is there a way to plot it directly from vectors without making any changes. Thanks in advance for your time and effort.
In order to plot a surface from your data,
the list Z should have len(Z)=len(X)*len(Y)
. If this is the case then you have to convert it to a reshaped numpy array:
z=np.array(Z).reshape((len(Y), len(X))
and define the Plotly surface as follows:
surf=Surface(x=X,
y=Y,
z=z,
colorscale=your_colorscale
)
Thanks empet. len(Z) is = len(X)*len(Y). I am a newbie to both python and plotly. I couldn`t get it plotted. Can you please help me with next couple of lines/syntax of code? Thanks.
z = np.array(Z).reshape((len(Y), len(X))) data = go.Surface(x=X,y=Y,z=z) fig = go.Figure(data=data)
If I execute the above, it throws out some error.
PlotlyDictValueError: 'data' has invalid value inside 'figure'
What am I doing wrong in here?
If I do this,
X = [1,2,3,4] Y = [1,2,3] Z = [] for i in X: for j in Y: Z.append(i*j) print (len(X)) print (len(Y)) print (len(Z)) z = np.array(Z).reshape((len(Y), len(X))) surf = go.Surface(z) data = [surf] fig = go.Figure(data=data)
It throws out
ValueError: dictionary update sequence element #0 has length 4; 2 is required
Got it working.
surf = go.Surface(z=z) data = [surf] py.iplot(data)
Thanks.