Документация здесь немного загадочна.
surfacecolor
(список, числовой массив или ряд чисел, строк или дат и чисел Панд).)
Устанавливает значения цвета поверхности, используемые для установки цветовой шкалы, независимой от z
.
Мне никогда не удавалось поместить список строк, то есть значений цвета, таких как 'rgb(0.3, 0.5, 0) 'или RGB-кортежей в нем.
Но вы можете определить собственную цветовую шкалу с необходимыми цветами.
colorscale = [[0, 'rgb' + str(cmap(1)[0:3])],
[1, 'rgb' + str(cmap(2)[0:3])]]
, а затем предоставить числовой массив сте же размеры, что и ваши значения на графике.
colors_saddle = np.zeros(shape=saddle.shape)
Все значения установлены на 0
и, следовательно, будут соответствовать первому цвету в вашем colorscale
.То же самое для следующего цвета.
Кроме того, вам необходимо установить cmax
и cmin
вручную.
Полный код
import numpy as np
import matplotlib.pyplot as plt
import plotly.graph_objs as go
import plotly.offline as off
off.init_notebook_mode()
make_int = np.vectorize(int)
cmap = plt.get_cmap("tab10")
saddle = np.array([[x**2-y**2 for x in np.arange(-10,11)] for y in np.arange(-10,11)])
paraboloid = np.array([[x**2 + y**2-100 for x in np.arange(-10,11)] for y in np.arange(-10,11)])
colors_saddle = np.zeros(shape=saddle.shape)
colors_paraboloid = np.ones(shape=paraboloid.shape)
colorscale = [[0, 'rgb' + str(cmap(1)[0:3])],
[1, 'rgb' + str(cmap(2)[0:3])]]
trace_a = go.Surface(z=saddle,
surfacecolor=colors_saddle,
opacity=.7,
name="Trace A",
cmin=0,
cmax=1,
colorscale=colorscale)
trace_b = go.Surface(z=paraboloid,
surfacecolor=colors_paraboloid,
opacity=.7,
name="Trace B",
cmin=0,
cmax=1,
showscale=False,
colorscale=colorscale)
data = [trace_a, trace_b]
off.iplot(data)