我想制作一个动画极坐标图,但我得到的图表只有一个半径和一个列表
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 的歌曲,然后我制作了一个数据框,其中包含每年列的中位数。现在我想用折线图动画表示该信息。
这篇文章展示了类似的东西,但省略了解释它是如何完成的代码。
将 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()
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 的歌曲,然后我制作了一个数据框,其中包含每年列的中位数。现在我想用折线图动画表示该信息。
这篇文章展示了类似的东西,但省略了解释它是如何完成的代码。 将 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()