У меня есть 3D-матрица, представляющая набор моделей ансамбля в форме Ансамбль x Компонент ансамбля x Список значений по оси Y. Я хочу иметь возможность построить все линии, принадлежащие одному ансамблю, как один цвет и появиться как один элемент в легенде, но с их шириной, определенной вручную, как значения, отличные от другого массива, который я ввожу. Прямо сейчас я могу делать цвета и толщину + непрозрачность вручную, но не легенду, и я не могу понять, как группировать по легенде наряду со всеми другими вещами, которые я делаю в ploty, ниже приведен пример типа графика, который я хочу за исключением того, что мне нужны все синие линии под одной записью в легенде и все желтые линии под другой. И вот мой код, пока, в идеале, я не хочу вручную назначать цвета, обратите внимание, что моя матрица сейчас сглажена, так что первые два измерения объединены, а затем я использую colours
, который имеет вид [0, ..., 0, 1, ..., 1, ...]
для определения срезов каждого ансамбля:
def create_cluster_ensemble_plot(matrix, opacity, colours, scale="linear") -> Figure:
x = np.arange(clustered_data.shape[1])
lines = [go.Scatter(x=x, y=clustered_data[i], showlegend=False, legendgroup=colours[i], line=dict(color=all_colours[colours[i]], width=opacity[i] / opacity.min()), mode="lines", opacity=opacity[i]) for i in range(clustered_data.shape[0])]
fig = go.Figure(
data=lines,
)
fig.update_traces(hovertemplate=None, hoverinfo='none')
fig.update_xaxes(fixedrange=True, showspikes=True, spikemode='across', spikesnap="cursor", spikedash='solid', spikethickness=2, spikecolor='grey')
fig.update_yaxes(fixedrange=True)
fig.update_layout(yaxis_type=scale, hovermode="x", spikedistance=-1)
return fig