Как назначить одинаковые цвета на двух графиках когда много линий в Plotly
Как при выводе большого количества линий на два графика, цвета линий верхнего и нижнего графика совпадали? Использую Plotly.
import plotly.graph_objects as go
import plotly.express as px
from plotly.subplots import make_subplots
import pandas as pd
import numpy as np
n_rows = 100
n_cols = 5
n_rows2 = 100
n_cols2 = 5
df1 = pd.DataFrame(np.random.randint(0, 100, size=(n_rows, n_cols)), columns=['col%d' % i for i in range(n_cols)])
df2 = pd.DataFrame(np.random.randint(0, 100, size=(n_rows2, n_cols2)), columns=['col%d' % i for i in range(n_cols2)])
fig_line = make_subplots(rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.007, row_width=[0.23, 0.8])
# верхнии линии
for i in df1:
fig_line.add_trace(go.Scatter(x=df1.index, y=df1[i], line=dict(width=1, dash="solid"), name = df1[i].name, connectgaps=True), row=1, col=1)
# нижнии линии
for n in df2:
fig_line.add_trace(go.Scatter(x=df2.index, y=df2[n], line=dict(width=1, dash="solid" ), name = df2[n].name, connectgaps=True), row=2, col=1)
# показ в браузер
fig_line.write_html('first_figure.html', auto_open=True)
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
Добавьте список именованных цветов в свой код размером равный количеству колонок ваших датафреймов, и потом подставляйте цвет в соответствии с номером колонки. Например так:
colors = ["crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray"]
# ^^^^ список цветов - можете выбирать любые, поддерживаемые plotly
fig_line = make_subplots(rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.007, row_width=[0.23, 0.8])
# верхние линии
for i in df1:
fig_line.add_trace(go.Scatter(x=df1.index, y=df1[i], line=dict(width=1, dash="solid",
color = colors[df1.columns.get_loc(i)]),
# ^^^ назначаем параметр color в соответствии с номером колонки
name = df1[i].name,
connectgaps=True), row=1, col=1)
# нижние линии
for n in df2:
fig_line.add_trace(go.Scatter(x=df2.index, y=df2[n], line=dict(width=1, dash="solid",
color = colors[df1.columns.get_loc(n)]),
# ^^^ назначаем параметр color в соответствии с номером колонки
name = df2[n].name,
connectgaps=True), row=2, col=1)
