python - Jupyter Lab交互式绘图: unsupported operand type(s) for *: 'FloatSlider' and 'float'

标签 python scipy plotly ipywidgets

我正在观看视频来学习如何使用plotly生成交互式绘图,但我不断收到错误:*:'FloatSlider'和'float'不受支持的操作数类型。

我很确定其他部分是正确的,原来的导师运行得很好,但在我的 jupyter 实验室上,它遇到了问题。

代码如下:

import plotly as py
import plotly.graph_objs as go
import ipywidgets as widgets
import numpy as np
from scipy import special

py.offline.init_notebook_mode(connected=True)
x = np.linspace(0, np.pi, 1000)

# Then layout the graph object in plotly
# Every object starts in a new line in the layout of plotly graph_objs
layout = go.Layout(
    # The title of the layout
    title = "Simple Example of Plotly",
    # Y axis, everything goes into a dict type, same of X axis
    yaxis = dict(
        title = "volts"
    ),
    xaxis = dict(
        title = "nanoseconds"
    )
)

# Now get a function with widgets using signals and frequency
# Put the trace into the function
def update_plot(signals, frequency):

    # Get a data list to put all traces in
    data = []
    for s in signals:
        # Put traces inside the function's loop
        trace1 = go.Scatter(
            x = x,
            n = freq * x,
            # Update y value using scipy's special's bessel functions
            y = special.jv(s, n),
            # Scatter has three modes, marker, lines, marker+lines
            mode = "lines",
            # Set a name
            name = "bessel {}".format(s),
            # Set up the interpolation, how the dots are connected with lines
            # line is going to be a dict
            line = dict(
                shape = "spline"
            )
        )
        data.append(trace1)

        # Plotting also goes in the function
        fig = go.Figure(data = data, layout=layout)
        # Finally show it
        py.offline.iplot(fig)

# Once the function is done, we create the widget
# Value in signals should be a tuple
signals = widgets.SelectMultiple(options = list(range(6)), value = (0,), 
description="Bessel Order")

# Make a freq
freq = widgets.FloatSlider(min = 1, max = 20, value = 1, description="Freq")

# Finally make the interaction
widgets.interactive(update_plot, signals = signals, frequency = freq)

有谁知道怎么解决吗?似乎special.jv(x,y)函数不接受操作数*?但即使我创建了另一个变量 n = freq * x,它仍然报告错误。非常感谢。

最佳答案

当您在 Python 中报告错误时,您应该在问题中包含完整回溯(即完整的错误消息)。所有输出中都有有用的信息,包括到底哪一行触发了错误。

这里,该行看起来是n = freq * x。您将 freq 创建为 freq = widgets.FloatSlider(min = 1, max = 20, value = 1, description="Freq"),因此 freq 是一个 FloatSlider 对象。另一个操作数 x 是一个 numpy 数组。显然没有为这些操作数定义乘法运算。也就是说,Python 不知道如何将 FloatSlider 和 numpy 数组相乘。

要获取 FloatSlider 的实际值以便可以用它进行算术运算,请使用 value 属性。将 n = freq * x 更改为

n = freq.value * x

关于python - Jupyter Lab交互式绘图: unsupported operand type(s) for *: 'FloatSlider' and 'float' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52967458/

相关文章:

python - 补丁不模拟模块

python - 如何添加文档以在快速 api View 上发布 body 模型?

python - Scipy 插值返回一个 'dimensionless' 数组

python - 线性回归残差 - 我应该 "standardise"结果以及如何做到这一点

python - scipy中重采样数组的索引

python - 如何创建可拖动的 plotly 对象

python - ZMQ 和 Twisted

python - Kivy,类型错误: 'NoneType' object has no attribute '__getitem__'

R plotly : Custom hover text does not appear when only one stacked bar

r - 找不到对象 "new_panel"ggplotly 错误