После нескольких часов поиска в Интернете я совершенно расстроен и сбит с толку тем, как обращаться с подграфиками с помощьюplotly express в Python.
Моя идея состоит в том, чтобы построить линейный график рядом с точечным графиком и линейным графиком и определить метки, данные при наведении и т. д. по отдельности + добавить фигуры и текст к их.
Однако то, что я придумал до сих пор, использует make_subplots и принимает только трассировки.
Следовательно, все форматирование фигурplotly.express теряется в подграфиках!
Я нашел только способ изменить пределы осей отдельных подграфиков, но не как добавить настраиваемый шаблон наведения, x-метки, y-метки и т. д.
import pandas as pd
import plotly.express as px
# CREATE 2 PLOTS with PLOTY EXPRESS ----------------------------------------------------
## fig 1 is a time series of two properties "type"
fig1 = px.line(df, x="year", y="total", color="type", title="layout.hovermode='x'")
fig1.update_traces(mode="markers+lines", hovertemplate=None)
fig1.update_layout(hovermode="x unified")
fig1.add_shape(type="line",
x0=2016,
y0=0,
x1=2016,
y1=800,
line=dict(
color="gray",
width=2,
dash="dot"))
## fig2 is a cross-plot of two properties "type"
fig2 = px.scatter(data_frame=df,
x='activity_2011_2015', y='activity_2016_2020',
#size='costs',
color='type')
# add x=y line
fig2.add_shape(type="line",
x0=0,
y0=0,
x1=600,
y1=600,
line=dict(
color="gray",
width=2,
dash="dot"))
# CREATE 1x2 SUBPLOTS ----------------------------------------------------
fig1_traces = []
fig2_traces = []
for trace in range(len(fig1["data"])):
fig1_traces.append(fig1["data"][trace])
for trace in range(len(fig2["data"])):
fig2_traces.append(fig2["data"][trace])
sub_fig = sp.make_subplots(rows=1, cols=2,
subplot_titles=['time series', 'cross-plot'],
horizontal_spacing=0.1)
for traces in fig1_traces:
sub_fig.append_trace(traces, row=1, col=1)
for traces in fig2_traces:
sub_fig.append_trace(traces, row=1, col=2)
## Address x axis and y axis range of first figure -----------------------------
sub_fig.update_layout(xaxis1 = dict(
tickmode = 'array',
range=[2015,2020],
tickvals = np.arange(2015, 2020, 1).tolist())
)
sub_fig.show()
sub_fig.write_html("sub_fig.html", include_plotlyjs="cdn")
Как я могу обращаться к отдельным фигурам и их элементам во вложенных графиках? Я хочу добавить фигуры обратно, добавить настроенные данные при наведении и отформатировать оси X и Y индивидуально, поскольку на графиках разные единицы измерения...
Если это невозможно, можно ли воссоздать этот код по-другому? Все, что мне нужно, это два графика, расположенные рядом, и взаимодействовать с ними...
После нескольких часов поиска в Интернете я совершенно расстроен и сбит с толку тем, как обращаться с [b]подграфиками[/b] с помощьюplotly express в [b]Python[/b]. Моя идея состоит в том, чтобы построить линейный график рядом с точечным графиком и линейным графиком и определить [b]метки[/b], [b]данные при наведении[/b] и т. д. по отдельности + добавить фигуры и текст к их. Однако то, что я придумал до сих пор, использует make_subplots и принимает только трассировки. Следовательно, все форматирование фигурplotly.express теряется в подграфиках! Я нашел только способ изменить пределы осей отдельных подграфиков, но не как добавить настраиваемый шаблон наведения, x-метки, y-метки и т. д. [code]import pandas as pd import plotly.express as px
# CREATE 2 PLOTS with PLOTY EXPRESS ---------------------------------------------------- ## fig 1 is a time series of two properties "type" fig1 = px.line(df, x="year", y="total", color="type", title="layout.hovermode='x'")
for trace in range(len(fig1["data"])): fig1_traces.append(fig1["data"][trace]) for trace in range(len(fig2["data"])): fig2_traces.append(fig2["data"][trace])
for traces in fig1_traces: sub_fig.append_trace(traces, row=1, col=1) for traces in fig2_traces: sub_fig.append_trace(traces, row=1, col=2)
## Address x axis and y axis range of first figure ----------------------------- sub_fig.update_layout(xaxis1 = dict( tickmode = 'array', range=[2015,2020], tickvals = np.arange(2015, 2020, 1).tolist()) )
sub_fig.show() sub_fig.write_html("sub_fig.html", include_plotlyjs="cdn") [/code] [list] [*][b]Как я могу обращаться к отдельным фигурам и их элементам во вложенных графиках?[/b] Я хочу добавить фигуры обратно, добавить настроенные данные при наведении и отформатировать оси X и Y индивидуально, поскольку на графиках разные единицы измерения... [*]Если это невозможно, можно ли воссоздать этот код по-другому? Все, что мне нужно, это два графика, расположенные рядом, и взаимодействовать с ними... [/list] [img]https://i.sstatic.net/xJmQm.png[/img]