我想制作一个动画极坐标图,但我得到的图表只有一个半径和一个列表

I want to make an animated polar chart but the chart i get only has one radii with a list

med_spotify = spotify_data.drop(columns=['name', 'explicit', 'artists', 'key', 'mode', 'time_signature', 'tempo', 'duration_ms', 'loudness'])    

med_spotify = med_spotify.groupby('release_date').median()
med_spotify = med_spotify.reset_index()
merged = med_spotify['release_date'].to_frame()
merged['theta'] = [med_spotify.columns] * len(merged)
merged['r'] = np.nan
merged['r'] = merged['r'].astype('object')
for k in range(len(merged)):
    merged.at[k, 'r'] = med_spotify.iloc[k].to_list()

fig4 = px.line_polar(merged, r='r', theta='theta', animation_frame='release_date', line_close=True)
fig4.show()

how the plot looks in the browser

我有一个数据框,其中包含来自 spotify 的歌曲,然后我制作了一个数据框,其中包含每年列的中位数。现在我想用折线图动画表示该信息。

https://medium.com/@marcosanchezayala/plotting-pokemon-attributes-plotly-polar-plots-and-animations-319934b60f0e

这篇文章展示了类似的东西,但省略了解释它是如何完成的代码。 将 theta 参数更改为列名列表以用作半径会给出一个错误,指出长度必须与 r 参数相同。 此代码显示空图但没有错误。

我在过去两天尝试了所有我知道的方法来使这项工作成功,并在互联网上到处搜索,但没有 px.line_polar 图表动画的代码示例。

谢谢

spotify_data 示例:

                                  name  duration_ms  explicit  \
0                                Carve       126903         0   
1  Capítulo 2.16 - Banquero Anarquista        98200         0   
2   Vivo para Quererte - Remasterizado       181640         0   
3        El Prisionero - Remasterizado       176907         0   
4                  Lady of the Evening       163080         0   

               artists  release_date  danceability  energy  key  loudness  \
0              ['Uli']          1922         0.645  0.4450    0   -13.338   
1  ['Fernando Pessoa']          1922         0.695  0.2630    0   -22.136   
2  ['Ignacio Corsini']          1922         0.434  0.1770    1   -21.180   
3  ['Ignacio Corsini']          1922         0.321  0.0946    7   -27.961   
4      ['Dick Haymes']          1922         0.402  0.1580    3   -16.900   

   mode  speechiness  acousticness  instrumentalness  liveness  valence  \
0     1       0.4510         0.674            0.7440     0.151    0.127   
1     1       0.9570         0.797            0.0000     0.148    0.655   
2     1       0.0512         0.994            0.0218     0.212    0.457   
3     1       0.0504         0.995            0.9180     0.104    0.397   
4     0       0.0390         0.989            0.1300     0.311    0.196   

     tempo  time_signature  
0  104.851               3  
1  102.009               1  
2  130.418               5  
3  169.980               3  
4  103.220               4  

由于给定的数据是宽格式,可以将其转换为长格式以使数据可用于绘图。提供的数据是部分数据,所以我复制了相同的数据并添加了年份。 pd.melt() 应该是指 this.

med_spotify = spotify_data.drop(columns=['name', 'explicit', 'artists', 'key', 'mode', 'time_signature', 'tempo', 'duration_ms', 'loudness']) 
med_spotify = med_spotify.groupby('release_date').median()
med_spotify.reset_index(inplace=True)
plot_data = pd.melt(med_spotify, id_vars='release_date', var_name='attribute', value_name='attribute_value')

import plotly.express as px

fig = px.line_polar(plot_data,
                    r='attribute_value', 
                    theta='attribute',
                    line_close=True, 
                    animation_frame = 'release_date',
                    title='Spotify',
                    template = 'ggplot2'
             )
fig.update_layout(
    autosize=False,
    height=600,
    width=800,
)

fig.show()