plotly 中的 3d 和 2d 子图

3d and 2d subplots in plotly

我正在尝试在 plotly 上制作 3d 和 2d 子图。在一个简单的测试用例中,我生成了两个子图,其中第一个有两个线框图,第二个有一个热图来描述两个 3d 图之间的差异。

当我尝试绘制第一个 (3d) 或第二个 (2d) 子图而不绘制另一个时,它们显示正确。但是当我尝试绘制两个子图时,出现以下错误(ipython 中的离线模式):

Javascript error adding output!
TypeError: Cannot read property 'overlaying' of undefined
See your browser Javascript console for more details.

这是我用来生成图表的代码:

#! /usr/bin/env python

from plotly import tools 
import plotly.plotly as py
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, iplot
import numpy as np

init_notebook_mode()

# Creating the data
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
xGrid, yGrid = np.meshgrid(y, x)
R = np.sqrt(xGrid ** 2 + yGrid ** 2)
z = np.sin(R)
z2 = np.cos(R)

line_marker = dict(color='#0066FF', width=2)
line_marker2 = dict(color='green', width=2)

scene=dict(
 xaxis=dict(
     gridcolor='rgb(255, 255, 255)',
     zerolinecolor='rgb(255, 255, 255)',
     showbackground=True,
     backgroundcolor='rgb(230, 230,230)'
 ),  
 yaxis=dict(
     gridcolor='rgb(255, 255, 255)',
     zerolinecolor='rgb(255, 255, 255)',
     showbackground=True,
     backgroundcolor='rgb(230, 230,230)'
 ),  
 zaxis=dict(
     gridcolor='rgb(255, 255, 255)',
     zerolinecolor='rgb(255, 255, 255)',
     showbackground=True,
     backgroundcolor='rgb(230, 230,230)'
 )
)

fig = tools.make_subplots(rows=1,cols=2,specs=[[{'is_3d':True},{'is_3d':False}]])
#comment this out and subplot 2 works
for i, j, k in zip(xGrid, yGrid, z): 
    fig.append_trace(go.Scatter3d(x=i, y=j, z=k, mode='lines', line=line_marker,name='wire1'),1,1) 
for i, j, k in zip(xGrid, yGrid, z2): 
    fig.append_trace(go.Scatter3d(x=i, y=j, z=k, mode='lines', line=line_marker2,name='wire2'),1,1)

#comment this out and subplot 1 works
fig.append_trace(go.Heatmap(x=x, y=y, z=np.sqrt((z-z2)**2)),1,2) 
fig['layout'].update(title='3d with heatmap',height=600,width=1000,showlegend=False)
plot_url = iplot(fig)

第二个问题:

假设可以解决这个问题,有没有办法让两个子图都响应悬停鼠标操作? (例如,鼠标悬停在 3d 图上 x-y 中的某些 space 上也会突出显示热图上的相应框?)

现在可以做到:https://plot.ly/python/mixed-subplots/。来自他们的例子: