#python #plotly #data-visualization
#python #plotly #визуализация данных
Вопрос:
Я хотел бы изменить «стандартный» кадр моей анимированной диаграммы и заставить его использовать последнюю дату по умолчанию при визуализации приложения Dash. Как я могу это сделать?
import plotly.express as px
df = px.data.gapminder()
fig = px.scatter(df, x="gdpPercap", y="lifeExp", animation_frame="year", animation_group="country",
size="pop", color="continent", hover_name="country",
log_x=True, size_max=55, range_x=[100,100000], range_y=[25,90])
Я пробую несколько разных подходов, например, что-то вроде этого:
fig.layout['sliders'][0]['active'] = 11
and
frame = -1
fig = go.Figure(fig.frames[frame].data, fig.frames[frame].layout)
fig
но это неправильно отражается на графике.
Может ли кто-нибудь дать мне указания о том, как я могу найти ссылки на это?
Я хочу заставить график начинаться с прошлого года.
Комментарии:
1. Если предоставленное предложение решило вашу проблему, пожалуйста, проголосуйте и отметьте его как принятый ответ.
2. Привет, Вестланд, спасибо за совет, я еще не слишком разбираюсь в динамике StackOverflow. Что мне делать, если мой собственный ответ является правильным ответом?
3. Я бы сделал то же, что и вы; отдайте должное тем, кто вам помог. Особенно, если их предложение каким-либо образом помогло вам создать идеальное решение. Я не уверен, так ли это здесь, но я бы сделал это так в любом случае.
Ответ №1:
Большое вам спасибо за ваш ответ, брат; Это работает.
Я создал решение, похожее на ваше, но с некоторыми отличиями:
import plotly.express as px
import plotly.graph_objects as go
df = px.data.gapminder()
fig = px.scatter(df, x="gdpPercap", y="lifeExp", animation_frame="year", animation_group="country",
size="pop", color="continent", hover_name="country",
log_x=True, size_max=55, range_x=[100,100000], range_y=[25,90])
last_frame_num = len(fig.frames) -1
fig.layout['sliders'][0]['active'] = last_frame_num
fig = go.Figure(data=fig['frames'][-1]['data'], frames=fig['frames'], layout=fig.layout)
fig
В любом случае, я очень ценю ваше внимание / поддержку, всегда здорово иметь больше возможностей при реализации чего-либо!
Большое вам спасибо; С наилучшими пожеланиями, Леонардо
Комментарии:
1. Вы можете пропустить last_frame_num и установить
data=fig.frames[-1].data
и считать, чтоlen(fig.frames) - 1
это ужеint
.2. Да, хорошо, что я отредактирую код; Я установил этот способ, потому что, когда я пытался реализовать с помощью -1, он не работал с активным параметром slider, поэтому я решил установить переменную с этим значением, чтобы быть уверенным, что оно всегда будет таким же.
3. Для меня это не работает для установки произвольного номера кадра (например, 5 вместо «last_frame_num»). Он отображает правильный кадр, после чего анимация начинается с нуля.
Ответ №2:
Проблема в том, что у fig.data
вас есть первый кадр. Я нашел обходной путь, создающий новую фигуру.
import plotly.express as px
import plotly.graph_objects as go
df = px.data.gapminder()
fig = px.scatter(df, x="gdpPercap", y="lifeExp", animation_frame="year", animation_group="country",
size="pop", color="continent", hover_name="country",
log_x=True, size_max=55, range_x=[100,100000], range_y=[25,90])
# New figure
fig2 = go.Figure()
# add last frame traces to fig2
for tr in fig.frames[-1].data:
fig2.add_trace(tr)
# copy the layout
fig2.layout = fig.layout
# copy the frames
fig2.frames = fig.frames
# set last frame as the active one
fig2.layout['sliders'][0]['active'] = len(fig.frames) - 1
fig2