Вопрос или проблема
Я строю две фигуры в Plotly, используя этот код:
d = {'1': pd.DataFrame({'x': [1,2,3], 'y': [2,4,6]}), '2': pd.DataFrame({'x': [2,4,6], 'y': [4,6,8]})}
def p1(df, n):
x = df.x.tolist()
y = df.y.tolist()
y_upper = (2*df.y).tolist()
y_lower = (0.5*df.y).tolist()
fig = go.Figure([
go.Scatter(
x=x,
y=y,
mode="lines",
name=n,
showlegend=True
),
go.Scatter(
x=x+x[::-1],
y=y_upper+y_lower[::-1],
fill="toself",
line=dict(color="rgba(255,255,255,0)"),
hoverinfo='skip',
showlegend=False
)
])
return fig
def p2():
fig_data = tuple(p1(df, n).data for n, df in d.items())
fig = go.Figure(sum(zip(*fig_data), ()))
fig.update_layout(xaxis=dict(range=[0, 5],
showgrid=True),
yaxis=dict(showgrid=True))
return fig
def p3():
fig = go.Figure()
for (n, df) in d.items():
y = df.iloc[1]
fig.add_trace(go.Bar(
x=['x', 'y', 'z'],
y=y,
name=n,
text=y,
textposition='outside'
))
fig.update_layout(bargroupgap=0.1, barmode="group")
return fig
Я хочу построить эти две фигуры в подграфиках и следую примеру на официальном сайте Plotly:
from plotly.subplots import make_subplots
import plotly.graph_objects as go
fig = make_subplots(rows=1, cols=2)
fig.add_trace(
p3().data[0],
row=1, col=1
)
fig.add_trace(
p2().data[0],
row=1, col=2
)
fig.update_layout(height=600, width=800, title_text="Боковые подграфики")
fig.show()
Это не сработает, так как у моих фигур есть больше, чем просто элемент data[0]
. Есть ли способ включить все элементы data
двух графиков в подграфик?
Вы можете добавить каждую трассу в цикле.
fig = make_subplots(rows=1, cols=2)
for trace in p3().data:
fig.add_trace(trace,
row=1, col=1
)
for trace in p2().data:
fig.add_trace(trace,
row=1, col=2
)
fig.update_layout(height=600, width=800, title_text="Боковые подграфики")
fig.show()
Ответ или решение
Создание Подграфиков с Несколькими Следами в Plotly
Ваша задача заключается в построении подграфиков для визуализации данных с использованием библиотеки Plotly. Основная проблема, с которой вы столкнулись, заключается в том, что фигуры содержат несколько трасс (следов), и вы хотите отобразить их все на подграфиках. В этом ответе мы подойдем к решению вашей задачи с помощью функции make_subplots
.
Пошаговое руководство
-
Импорт необходимых библиотек:
Убедитесь, что вы импортировали все необходимые модули Plotly и Pandas:import plotly.graph_objects as go import pandas as pd from plotly.subplots import make_subplots
-
Создание данных:
Заполняем ваши данные в формате словаря, где ключами являются идентификаторы, а значениями — датафреймы Pandas.d = { '1': pd.DataFrame({'x': [1, 2, 3], 'y': [2, 4, 6]}), '2': pd.DataFrame({'x': [2, 4, 6], 'y': [4, 6, 8]}) }
-
Определение функций для построения графиков:
Вы уже определили функцииp1
,p2
, иp3
, которые создают различные графики. Убедитесь, что они корректно работают, и возвращают объекты Figure с нужными следами. -
Использование
make_subplots
:
Теперь мы можем создать фигуру с подграфиками и добавить все следы из обеих функций, используя цикл. Это позволит вам избежать проблемы с использованием только первого следа (data[0]
).# Создание объекта Figure с подграфиками fig = make_subplots(rows=1, cols=2, subplot_titles=("График 1", "График 2")) # Добавление следов от p3 в первый подграфик for trace in p3().data: fig.add_trace(trace, row=1, col=1) # Добавление следов от p2 во второй подграфик for trace in p2().data: fig.add_trace(trace, row=1, col=2) # Обновление макета графика fig.update_layout(height=600, width=800, title_text="Сторонние подграфики")
-
Отображение графика:
Теперь, когда все следы добавлены, вы можете отобразить график.fig.show()
Заключение
С помощью данного подхода вы сможете легко создать подграфики с несколькими следами и надписями, улучшая читабельность и информативность ваших визуализаций. Совмещение разных типов графиков, таких как линейные графики и гистограммы, может помочь пользователям лучше воспринимать данные и делать выводы.
В случае возникновения дальнейших вопросов или необходимости в помощи, не стесняйтесь обращаться за поддержкой по работе с библиотекой Plotly.