从你的数据集和所附的图片来看,你要的是 要求 是这样的。
但我不确定这是否是你的真实想法。想要. 你看,你的特定数据集没有足够的维度来证明动画的存在。甚至是一个气泡图。这是因为你只看到了 一个 的值,所以你最终会在气泡大小和Y轴上显示相同的值。所以你最终在气泡大小和Y轴上显示的是同一个值。如果你提供的截图就是你想要的图形,那么就没有必要改变你的数据集。但如果你愿意的话,我们可以再讨论一下这个问题。
由于你没有提供样本数据集,我使用了一个可以通过plotly 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()