# py3Dmol¶

A simple IPython/Jupyter widget to embed an interactive 3Dmol.js viewer in a notebook.

The widget is completely static, which means the viewer doesn't need a running IPython kernel to be useful and web pages and presentations generated from the notebook will work as expected. However, this also means there is only one-way communication between the notebook and the viewer.

## Installation¶

From PyPI:

    pip install py3Dmol

## API¶

The returned view object has the exact same API as 3Dmol.GLViewer with the exception that functions return None.

In [1]:

    import py3Dmol

In [2]:

    p = py3Dmol.view(query='pdb:1ycr')
    p.setStyle({'cartoon': {'color':'spectrum'}})
    p.show()

Out[2]:
In [3]:

    xyz = '''4
    * (null), Energy   -1000.0000000
    N     0.000005    0.019779   -0.000003   -0.157114    0.000052   -0.012746
    H     0.931955   -0.364989    0.000003    1.507100   -0.601158   -0.004108
    H    -0.465975   -0.364992    0.807088    0.283368    0.257996   -0.583024
    H    -0.465979   -0.364991   -0.807088    0.392764    0.342436    0.764260
    '''

In [4]:

    xyzview = py3Dmol.view(width=400,height=400)
    xyzview.addModel(xyz,'xyz',{'vibrate': {'frames':10,'amplitude':1}})
    xyzview.setStyle({'stick':{}})
    xyzview.setBackgroundColor('0xeeeeee')
    xyzview.animate({'loop': 'backAndForth'})
    xyzview.zoomTo()
    xyzview.show()

Out[4]:

Display local file.

In [5]:

    benz='''
         RDKit          3D

      6  6  0  0  0  0  0  0  0  0999 V2000
       -0.9517    0.7811   -0.6622 C   0  0  0  0  0  0  0  0  0  0  0  0
        0.2847    1.3329   -0.3121 C   0  0  0  0  0  0  0  0  0  0  0  0
        1.2365    0.5518    0.3512 C   0  0  0  0  0  0  0  0  0  0  0  0
        0.9517   -0.7811    0.6644 C   0  0  0  0  0  0  0  0  0  0  0  0
       -0.2847   -1.3329    0.3144 C   0  0  0  0  0  0  0  0  0  0  0  0
       -1.2365   -0.5518   -0.3489 C   0  0  0  0  0  0  0  0  0  0  0  0
      1  2  2  0
      2  3  1  0
      3  4  2  0
      4  5  1  0
      5  6  2  0
      6  1  1  0
    M  END
    $$$$'''
    view = py3Dmol.view()
    view.addModel(benz,'sdf')
    view.setStyle({'stick':{}})
    view.setStyle({'model':0},{'stick':{'colorscheme':'cyanCarbon'}})
    view.zoomTo()

Out[5]:
In [6]:

    view = py3Dmol.view(query='pdb:1dc9',linked=True,viewergrid=(2,2))
    view.setViewStyle({'style':'outline','color':'black','width':0.1})
    view.setStyle({'cartoon':{'arrows':True, 'tubes':True, 'style':'oval', 'color':'white'}})
    view.addModel(benz,'sdf',viewer=(1,1))
    view

Out[6]:
In [7]:

    view = py3Dmol.view(query='pdb:1ycr')
    chA = {'chain':'A'}
    chB = {'chain':'B'}
    view.setStyle(chA,{'cartoon': {'color':'spectrum'}})
    view.addSurface(py3Dmol.VDW,{'opacity':0.7,'color':'white'}, chA)
    view.setStyle(chB,{'stick':{}})
    view.show()

Out[7]:
In [8]:

    view = py3Dmol.view(query='pdb:5ire',options={'doAssembly':True})
    view.setStyle({'cartoon':{'color':'spectrum'}})
    view.show()

Out[8]:

Color by temperature factors

In [9]:

    view = py3Dmol.view(query='pdb:1ycr')
    view.setStyle({'cartoon': {'color':'white'}})
    view.addSurface(py3Dmol.VDW,{'opacity':0.7,'colorscheme':{'prop':'b','gradient':'sinebow','min':0,'max':70}})

Out[9]:

Generate an inline image of what is currently in the viewer (all white if the structure hasn't loaded yet).

In [10]:

    png = view.png()
    png

Out[10]:
In [ ]:

In [ ]:

In [ ]: