Hello everyone

I want to plot a three dimensional function using colors as representation of the 4th dimension (i.e. the function value).

I am orienting my code on a surface plot as described here: Creating 4D Surface Graph - #2 by empet

Since I want a scatterplot I use go.Scatter3d(β¦) instead of go.Surface(β¦). In the surface plot I used an array surf color which indicates the color the points should have.

When transferring that to the scatterplot I get the following error:

```
Invalid value of type 'numpy.ndarray' received for the 'surfacecolor' property of scatter3d
```

followed by my surfsolo array with the shape of z.

Do you have an idea how to plot this scatterplot properly? With the documentation I did not manage to do it.

Here is the code to reproduce Thank you already for your help

```
import numpy as np
import torch
import gpytorch
import matplotlib.pyplot as plt
from matplotlib import cm
import matplotlib.colors as mcolors
import statistics # from Python library
from scipy.stats import norm
import plotly.graph_objects as go
import pandas as pd
import seaborn as sns
def Hartmann3_fun(x1,x2,x3) :
x = np.array([x1,x2,x3])
hartmann_value =0
P = 1e-4 * np.array([
[3689, 1170, 2673],
[4699,4387,7470],
[1091,8732,5547],
[381,5743,8828]
])
alpha= [1.0,1.2,3.0,3.2]
A = np.array([
[3.0,10,30],
[0.1,10,35],
[3.0,10,30],
[0.1,10,35]
])
for i in range(4):
inner_val = 0
for j in range(3):
inner_val += A[i,j]*(x[j] - P[i,j])**2.
hartmann_value += alpha[i]*np.exp(-1.*inner_val)
return hartmann_value
x_steps = np.linspace(0,1,101)
d1,d2,d3 = np.meshgrid(x_steps,x_steps,x_steps)
x_in = [[d1,d2,d3] for d1,d2,d3 in zip(d1.ravel(),d2.ravel(),d3.ravel())]
hartmann3_data = pd.DataFrame(x_in)
hartmann3_data.rename(columns={0:"x1",1:"x2",2:"x3"}, inplace= True)
hartmann3_data["value"] = Hartmann3_fun(hartmann3_data["x1"],hartmann3_data["x2"],hartmann3_data["x3"])
surfcolor = hartmann3_data["value"].to_numpy().reshape(*d3.shape)
fig = go.Figure(data=[go.Scatter3d(x=d1, y=d2, z = d3,surfacecolor= surfcolor, opacity=0.8)])
fig.update_layout(margin=dict(l=20, r=20, t=20, b=20),
height = 600, width =500, scene_aspectmode="cube")
fig.show()
```