为Plotly绘制函数创建包装函数

时间:2017-02-07 22:32:40

标签: python ipython jupyter-notebook plotly

我正在研究Jupyter笔记本,我正在尝试使用我自己的布局设置为常规Plotly Scatter3d()函数创建一个包装函数,这样我每次需要绘制一些东西时都可以直接调用它,并节省屏幕空间。

但这不起作用。屏幕上没有显示任何内容。有谁知道为什么?

我的代码:

def BSplot3dPlotly(xyz):
xyz = np.reshape(xyz, (int(xyz.size/3), 3))

trace1 = go.Scatter3d(
    x=xyz[:,0],
    y=xyz[:,1],
    z=xyz[:,2],
    mode = 'markers', # lines+markers',
    #marker=Marker(color=Y, colorscale='Portland')
    marker=dict(
        size=12,
        line=dict(
            color='rgba(217, 217, 217, 0.14)',
            width=0.5
        ),
        opacity=0.8
    )
)

data = go.Data([trace1]) #[trace1]
layout = go.Layout(
    margin=dict(
        l=0,
        r=0,
        b=0,
        t=0
    )
)

fig = go.Figure(data=data, layout=layout)
py.iplot(fig, filename=name)

此处,输入xyz只是包含某些点的x,y,z坐标的列表。

2 个答案:

答案 0 :(得分:1)

  • 您正在定义一个函数BSplot3dPlotly,但它不会返回任何可能是您没有看到任何内容的原因。
  • line字典中marker没有做任何事情。您需要将模式设置为markers+line以获取标记和线条,然后使用单独的line字典。

enter image description here

import numpy as np
import plotly.graph_objs as go
import plotly.plotly as py
import plotly.offline as offline

def scatter3d_wrapper(xyz):

    trace = go.Scatter3d(
        x=xyz[:,0],
        y=xyz[:,1],
        z=xyz[:,2],
        mode = 'markers+lines',
        marker=dict(
            color='rgb(255,0,0)',
            size=12
        ),
        line=dict(
            color='rgb(0, 0, 255)',
            width=10
        )
    )
    return trace

xyz = np.random.random((20, 3))

trace1 = scatter3d_wrapper(xyz)

data = go.Data([trace1])

fig = go.Figure(data=data)
offline.plot(fig, filename='wrapper.html')

答案 1 :(得分:0)

对于matplotlib,您必须先运行以下内容才能看到图表:

%matplotlib inline

试试。