1

我正在尝试在离线模式下使用 plotly 使极坐标图平滑旋转。按照文档中提供的示例,我通过使用 as 方法“animate”创建一个按钮并将转换时间设置为 >0 ms 的值来做到这一点。

使用 scatterpolar 类型图而不是 barplot 时会出现同样的问题,但是动画确实适用于非极性类型的散点图。

import plotly.graph_objs as go
import plotly.offline as offline
import pandas as pd
import numpy as np
offline.init_notebook_mode()

#some data to plot:
df = pd.DataFrame({'artist':['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'],
                            'birth': pd.to_datetime(pd.Series(['1990-04-01T00:00:00.000000000', '1945-12-01T00:00:00.000000000',
                                      '1955-01-01T00:00:00.000000000', '1956-01-01T00:00:00.000000000',
                                      '1976-12-01T00:00:00.000000000', '1930-05-01T00:00:00.000000000',
                                      '1942-01-01T00:00:00.000000000', '1936-11-01T00:00:00.000000000',
                                      '1971-12-01T00:00:00.000000000', '1952-12-01T00:00:00.000000000'])), 
                            'death': pd.to_datetime(pd.Series(['2012-04-01T00:00:00.000000000', '2015-12-01T00:00:00.000000000',
                                      '2010-01-01T00:00:00.000000000', '2017-01-01T00:00:00.000000000',
                                      '2016-12-01T00:00:00.000000000', '2017-05-01T00:00:00.000000000',
                                      '2010-01-01T00:00:00.000000000', '2015-11-01T00:00:00.000000000',
                                      '2014-12-01T00:00:00.000000000', '2013-12-01T00:00:00.000000000']))} )

#creating the barplot:
shift = df['birth'] - pd.datetime(1970, 1 ,1) 
trace = {
    'name': "to", 
    'r': (df['death']- shift).dt.date, 
    'theta': np.linspace(0,360,11),
    'base':df['birth'].dt.date,
    'type': 'barpolar'
}
data = [trace]

nsteps = 20
tracedicts = [] 
start_thetas = np.linspace(0,360,nsteps)
for i in start_thetas:
    tracedicts.append(trace.copy())
    tracedicts[-1]['theta'] = np.linspace(i,360+i,11)

frames = [{'data': [tracei]} for tracei in tracedicts]

layout = {
    'polar':{
        'angularaxis':{
            'visible': False,
        },
        'radialaxis':{  
            'showgrid': True,
            'type': 'date',
            'hoverformat': '%m-%Y',
        }
    },
    'updatemenus': [{
        'type': 'buttons',
        'x': 0.1,
        'y': 0,
        'buttons':[{'label':'Play', 'method':'animate',
                    'args':[None, {'frame':{'duration':600, 'redraw':True}, 
                                   'transition':{'duration':400},
                                   'fromcurrent':True,
                                   'easing': 'linear'}]}]
    }],
} 

fig = go.Figure(data=data, layout=layout, frames = frames)
offline.iplot(fig,auto_play=False)

动画可以显示不同的帧,但过渡不起作用。这是不是所有极坐标图和/或条形图都不存在的功能?

(您还会注意到我设置'redraw':True了 - 这是因为否则动画仅在auto_play=True最后设置时才有效。)

4

0 回答 0