绘制python子图

绘制python子图,python,plot,plotly,Python,Plot,Plotly,我试图用这两个情节制作子情节,但无法使其工作。我需要输出为一个“div”,两个图垂直堆叠为子图。通常我只使用Matplotlib,但我需要Plotly中的3D功能区打印 像这样: 地块1 情节2 谢谢你的帮助 埃里克 来自Plotly的用户Empe在此处发布了我问题的解决方案: 我添加了一些自定义颜色,以使情节在一起看起来更好 非常有帮助!谢谢你 import plotly.plotly as py import plotly.graph_objs as go import plotly.off

我试图用这两个情节制作子情节,但无法使其工作。我需要输出为一个“div”,两个图垂直堆叠为子图。通常我只使用Matplotlib,但我需要Plotly中的3D功能区打印

像这样:

地块1

情节2

谢谢你的帮助

埃里克


来自Plotly的用户Empe在此处发布了我问题的解决方案:

我添加了一些自定义颜色,以使情节在一起看起来更好

非常有帮助!谢谢你

import plotly.plotly as py
import plotly.graph_objs as go
import plotly.offline as offline
import plotly.plotly as py
import plotly.figure_factory as ff
import plotly.offline as offline
from plotly import tools
import numpy as np

fig = tools.make_subplots(specs=[[{'is_3d': True}], [{'is_3d':False}], [{'is_3d':False}]], vertical_spacing=0.005, rows=3, cols=1)

data0 = list(np.random.normal(-5,.5,25))
data1 = list(np.random.normal(-3.5,1,25))
data2 = list(np.random.normal(0,2,25))
data3 = list(np.random.normal(1,1,25))
data4 = list(np.random.normal(5,3,25))
data5 = list(np.random.normal(7,5,25))
index = list(range(0,len(data0),1))

spectra = [
    index,
    data0,
    data1,
    data2,
    data3,
    data4,
    data5
]

spectra = np.transpose(spectra)

y_raw = spectra[:, 0] # wavelength
sample_size = spectra.shape[1]-1
for i in range(1, sample_size):
    z_raw = spectra[:, i]
    x = []
    y = []
    z = []
    ci = int(255/sample_size*i) # ci = “color index”
    for j in range(0, len(z_raw)):
        z.append([z_raw[j], z_raw[j]])
        y.append([y_raw[j], y_raw[j]])
        x.append([i*2, i*2+1])
    fig.append_trace(dict(
                z=z,
                x=x,
                y=y,
                colorscale=[ [i, 'rgb(100,{}, 255)'.format(ci)] for i in np.arange(0, 1.1, 0.1)],
                showscale = False,
                showlegend = True,
                type='surface',
                ), 1, 1)


colors = ['rgb(100,000,255)', 'rgb(100,50,255)','rgb(100,100,255)','rgb(100,150,255)','rgb(100,200,255)','rgb(100,250,255)']

traces2 = [data0, data1, data2, data3, data4, data5]

group_labels = ['a0', 'a1', 'a2', 'a3', 'a4', 'a5']

# Second subplot
fig2 = ff.create_distplot(traces2, group_labels, bin_size=.2,colors =.  colors)

for mydata in fig2['data']:
    if mydata['yaxis']=='y1':
        fig.append_trace(mydata, 2, 1)
    else:
        fig.append_trace(mydata, 3, 1)

fig['layout']['scene1'].update(camera=dict(eye=dict(x=.25, y=.25, z=.25)))
fig['layout']['scene1']['domain'].update(y=[0.6, 1])

fig['layout']['yaxis2'].update(domain=[0, 0.1375])
fig['layout']['yaxis1'].update(domain=[0.1575, 0.55])
fig['layout']['xaxis2'].update(zeroline=False)#remove the line x=0 in the lower cell

fig['layout'].update(height=900, width=1000, autosize=True, legend=dict(x=1.1, y=0.40), barmode='overlay')

my_div = offline.plot(fig, filename='Distplot with Multiple Datasets', show_link=False, include_plotlyjs=False, output_type='div')

print(my_div)

图1和图2是通过'fig1','fig2'命令以及'div1'和'div2'命令生成的。好的,还有一件事:使用'and'代替'like'Blackbody'替换为'Blackbody',另外,您可以修复代码中的缩进问题吗?为了清晰起见,修复了意图并删除了“注释掉”代码。仍然存在缩进问题以及“和”。另一方面,你想要哪种布局。。可能是堆叠的子地块?是的,堆叠的子地块。我不知道你说的“和”是什么意思。
import plotly.plotly as py
import plotly.graph_objs as go
import plotly.offline as offline
import plotly.plotly as py
import plotly.figure_factory as ff
import plotly.offline as offline
from plotly import tools
import numpy as np

fig = tools.make_subplots(specs=[[{'is_3d': True}], [{'is_3d':False}], [{'is_3d':False}]], vertical_spacing=0.005, rows=3, cols=1)

data0 = list(np.random.normal(-5,.5,25))
data1 = list(np.random.normal(-3.5,1,25))
data2 = list(np.random.normal(0,2,25))
data3 = list(np.random.normal(1,1,25))
data4 = list(np.random.normal(5,3,25))
data5 = list(np.random.normal(7,5,25))
index = list(range(0,len(data0),1))

spectra = [
    index,
    data0,
    data1,
    data2,
    data3,
    data4,
    data5
]

spectra = np.transpose(spectra)

y_raw = spectra[:, 0] # wavelength
sample_size = spectra.shape[1]-1
for i in range(1, sample_size):
    z_raw = spectra[:, i]
    x = []
    y = []
    z = []
    ci = int(255/sample_size*i) # ci = “color index”
    for j in range(0, len(z_raw)):
        z.append([z_raw[j], z_raw[j]])
        y.append([y_raw[j], y_raw[j]])
        x.append([i*2, i*2+1])
    fig.append_trace(dict(
                z=z,
                x=x,
                y=y,
                colorscale=[ [i, 'rgb(100,{}, 255)'.format(ci)] for i in np.arange(0, 1.1, 0.1)],
                showscale = False,
                showlegend = True,
                type='surface',
                ), 1, 1)


colors = ['rgb(100,000,255)', 'rgb(100,50,255)','rgb(100,100,255)','rgb(100,150,255)','rgb(100,200,255)','rgb(100,250,255)']

traces2 = [data0, data1, data2, data3, data4, data5]

group_labels = ['a0', 'a1', 'a2', 'a3', 'a4', 'a5']

# Second subplot
fig2 = ff.create_distplot(traces2, group_labels, bin_size=.2,colors =.  colors)

for mydata in fig2['data']:
    if mydata['yaxis']=='y1':
        fig.append_trace(mydata, 2, 1)
    else:
        fig.append_trace(mydata, 3, 1)

fig['layout']['scene1'].update(camera=dict(eye=dict(x=.25, y=.25, z=.25)))
fig['layout']['scene1']['domain'].update(y=[0.6, 1])

fig['layout']['yaxis2'].update(domain=[0, 0.1375])
fig['layout']['yaxis1'].update(domain=[0.1575, 0.55])
fig['layout']['xaxis2'].update(zeroline=False)#remove the line x=0 in the lower cell

fig['layout'].update(height=900, width=1000, autosize=True, legend=dict(x=1.1, y=0.40), barmode='overlay')

my_div = offline.plot(fig, filename='Distplot with Multiple Datasets', show_link=False, include_plotlyjs=False, output_type='div')

print(my_div)