- Plotly教程
- 阴谋 - 主页
- Plotly - 简介
- Plotly - 环境设置
- Plotly - 在线和离线绘图
- 使用 Jupyter Notebook 内联绘图
- Plotly - 包结构
- Plotly - 导出到静态图像
- Plotly - 传奇
- Plotly - 设置轴和刻度的格式
- Plotly - 子图和插图
- Plotly - 条形图和饼图
- Plotly - 散点图、Scattergl 图和气泡图
- Plotly - 点图和表格
- Plotly - 直方图
- Plotly - 箱线图小提琴图和等高线图
- Plotly - 分布图、密度图和误差条图
- Plotly - 热图
- Plotly - 极坐标图和雷达图
- Plotly - OHLC 图表瀑布图和漏斗图
- Plotly - 3D 散点图和曲面图
- Plotly - 添加按钮/下拉菜单
- Plotly - 滑块控制
- Plotly -FigureWidget 类
- 与pandas和袖扣密谋
- 使用 Matplotlib 和 Chart Studio 绘图
- 非常有用的资源
- Plotly - 快速指南
- Plotly - 有用的资源
- Plotly - 讨论
Plotly - 添加按钮下拉菜单
Plotly 通过在绘图区域使用不同的控件(例如按钮、下拉菜单和滑块等)提供高度的交互性。这些控件与绘图布局的updatemenu属性合并在一起。您可以通过指定要调用的方法来添加按钮及其Behave。
有四种可能的方法可以与按钮关联,如下所示 -
restyle - 修改数据或数据属性
relayout - 修改布局属性
更新- 修改数据和布局属性
animate - 开始或暂停动画
修改图形的数据和数据属性时应使用restyle方法。在以下示例中,Updatemenu()方法通过restyle方法将两个按钮添加到布局中。
go.layout.Updatemenu( type = "buttons", direction = "left", buttons = list([ dict(args = ["type", "box"], label = "Box", method = "restyle"), dict(args = ["type", "violin"], label = "Violin", method = "restyle" )] ))
type属性的值默认为按钮。要呈现按钮的下拉列表,请将类型更改为dropdown。在按上述方式更新其布局之前,将 Box 跟踪添加到 Figure 对象。根据单击的按钮呈现箱线图和小提琴图的完整代码如下 -
import plotly.graph_objs as go fig = go.Figure() fig.add_trace(go.Box(y = [1140,1460,489,594,502,508,370,200])) fig.layout.update( updatemenus = [ go.layout.Updatemenu( type = "buttons", direction = "left", buttons=list( [ dict(args = ["type", "box"], label = "Box", method = "restyle"), dict(args = ["type", "violin"], label = "Violin", method = "restyle") ] ), pad = {"r": 2, "t": 2}, showactive = True, x = 0.11, xanchor = "left", y = 1.1, yanchor = "top" ), ] ) iplot(fig)
代码的输出如下 -
单击小提琴按钮可显示相应的小提琴图。
如上所述,Updatemenu()方法中type key的值被分配给dropdown以显示按钮的下拉列表。该图如下所示 -
修改图表的数据和布局部分时应使用更新方法。以下示例演示了如何更新以及显示哪些迹线,同时更新布局属性(例如图表标题)。对应于正弦波和余弦波的两条散点迹线被添加到Figure对象中。可见属性为True 的迹线将显示在绘图上,而其他迹线将被隐藏。
import numpy as np import math #needed for definition of pi xpoints = np.arange(0, math.pi*2, 0.05) y1 = np.sin(xpoints) y2 = np.cos(xpoints) fig = go.Figure() # Add Traces fig.add_trace( go.Scatter( x = xpoints, y = y1, name = 'Sine' ) ) fig.add_trace( go.Scatter( x = xpoints, y = y2, name = 'cos' ) ) fig.layout.update( updatemenus = [ go.layout.Updatemenu( type = "buttons", direction = "right", active = 0, x = 0.1, y = 1.2, buttons = list( [ dict( label = "first", method = "update", args = [{"visible": [True, False]},{"title": "Sine"} ] ), dict( label = "second", method = "update", args = [{"visible": [False, True]},{"title": Cos"}] ) ] ) ) ] ) iplot(fig)
最初,将显示正弦曲线。如果单击第二个按钮,则会出现cos 迹线。
请注意,图表标题也会相应更新。
为了使用animate方法,我们需要向 Figure对象添加一个或多个Frame 。除了数据和布局之外,框架还可以作为图对象中的键添加。帧关键点指向一系列图形,触发动画时将循环显示每个图形。
您可以通过向布局添加updatemenus 数组来添加、播放和暂停按钮以在图表中引入动画。
"updatemenus": [{ "type": "buttons", "buttons": [{ "label": "Your Label", "method": "animate", "args": [frames] }] }]
在以下示例中,首先绘制散点曲线轨迹。然后添加帧,它是50 个 Frame 对象的列表,每个对象代表曲线上的一个红色标记。请注意,按钮的args属性设置为 None,因此所有帧都具有动画效果。
import numpy as np t = np.linspace(-1, 1, 100) x = t + t ** 2 y = t - t ** 2 xm = np.min(x) - 1.5 xM = np.max(x) + 1.5 ym = np.min(y) - 1.5 yM = np.max(y) + 1.5 N = 50 s = np.linspace(-1, 1, N) #s = np.arange(0, math.pi*2, 0.1) xx = s + s ** 2 yy = s - s ** 2 fig = go.Figure( data = [ go.Scatter(x = x, y = y, mode = "lines", line = dict(width = 2, color = "blue")), go.Scatter(x = x, y = y, mode = "lines", line = dict(width = 2, color = "blue")) ], layout = go.Layout( xaxis=dict(range=[xm, xM], autorange=False, zeroline=False), yaxis=dict(range=[ym, yM], autorange=False, zeroline=False), title_text="Moving marker on curve", updatemenus=[ dict(type="buttons", buttons=[dict(label="Play", method="animate", args=[None])]) ] ), frames = [go.Frame( data = [ go.Scatter( x = [xx[k]], y = [yy[k]], mode = "markers", marker = dict( color = "red", size = 10 ) ) ] ) for k in range(N)] ) iplot(fig)
代码的输出如下所示 -
单击播放按钮时,红色标记将开始沿着曲线移动。