Судя по вашему набору данных и приложенному изображению, то, что вы просите , выглядит примерно так:
Но Я не уверен, что это то, что вы на самом деле хотите . Видите ли, с вашим конкретным набором данных недостаточно измерений, чтобы оправдать анимацию. Или даже пузырьковый сюжет. Это потому, что вы смотрите только на значение one . Таким образом, в итоге вы показываете одно и то же значение через размеры пузырьков и по оси y. И действительно, нет необходимости изменять ваш набор данных, учитывая, что предоставленный вами скриншот фактически является вашим желаемым графиком. Но мы можем поговорить об этом подробнее, если хотите.
Поскольку вы не предоставили образец набора данных, я использовал набор данных, который доступен через график express, и изменил его так, чтобы он соответствовал вашему набор данных:
Полный код:
# imports
import plotly.graph_objects as go
import plotly.express as px
import pandas as pd
import math
import numpy as np
# color cycle
colors = px.colors.qualitative.Alphabet*10
# sample data with similar structure as OP
df = px.data.gapminder().query("continent=='Americas'")
dfp=df.pivot(index='year', columns='country', values='pop')
dfp=dfp[['United States', 'Mexico', 'Argentina', 'Brazil', 'Colombia']]
dfp=dfp.sort_values(by='United States', ascending = False)
dfp=dfp.T
dfp.columns = [str(yr) for yr in dfp.columns]
dfp = dfp[dfp.columns[::-1]].T
# build figure and add traces
fig=go.Figure()
for col, country in enumerate(dfp):
vals = dfp[country].values
yVals = [col]*len(vals)
fig.add_traces(go.Scatter(
y=yVals,
x=dfp.index,
mode='markers',
marker=dict(color=colors[col],
size=vals,
sizemode='area',
#sizeref=2.*max(vals)/(40.**2),
sizeref=2.*max(dfp.max())/(40.**2),
sizemin=4),
name = country
))
# edit y tick layout
tickVals = np.arange(0, len(df.columns))
fig.update_layout(
yaxis = dict(tickmode = 'array',
tickvals = tickVals,
ticktext = dfp.columns.tolist()))
fig.show()