def threeD_seismplot(stations, nodes, size=(<NUM_LIT>, <NUM_LIT>), **kwargs):
import matplotlib.pyplot as plt<EOL>from mpl_toolkits.mplot3d import Axes3D<EOL>stalats, stalongs, staelevs = zip(*stations)<EOL>evlats, evlongs, evdepths = zip(*nodes)<EOL>_evlongs = []<EOL>for evlong in evlongs:<EOL><INDENT>if evlong < <NUM_LIT:0>:<EOL><INDENT>evlong = float(evlong)<EOL>evlong += <NUM_LIT><EOL><DEDENT>_evlongs.append(evlong)<EOL><DEDENT>evlongs = _evlongs<EOL>_stalongs = []<EOL>for stalong in stalongs:<EOL><INDENT>if stalong < <NUM_LIT:0>:<EOL><INDENT>stalong = float(stalong)<EOL>stalong += <NUM_LIT><EOL><DEDENT>_stalongs.append(stalong)<EOL><DEDENT>stalongs = _stalongs<EOL>evdepths = [-<NUM_LIT:1> * depth for depth in evdepths]<EOL>fig = plt.figure(figsize=size)<EOL>ax = Axes3D(fig)<EOL>ax.scatter(evlats, evlongs, evdepths, marker="<STR_LIT:x>", c="<STR_LIT:k>",<EOL>label='<STR_LIT>')<EOL>ax.scatter(stalats, stalongs, staelevs, marker="<STR_LIT:v>", c="<STR_LIT:r>",<EOL>label='<STR_LIT>')<EOL>ax.set_ylabel("<STR_LIT>")<EOL>ax.set_xlabel("<STR_LIT>")<EOL>ax.set_zlabel("<STR_LIT>")<EOL>ax.get_xaxis().get_major_formatter().set_scientific(False)<EOL>ax.get_yaxis().get_major_formatter().set_scientific(False)<EOL>plt.legend()<EOL>fig = _finalise_figure(fig=fig, **kwargs)  <EOL>return fig<EOL>
Plot seismicity and stations in a 3D, movable, zoomable space.

Uses matplotlibs Axes3D package.

:type stations: list
:param stations: list of one tuple per station of (lat, long, elevation), \
    with up positive.
:type nodes: list
:param nodes: list of one tuple per event of (lat, long, depth) with down \
    positive.
:type size: tuple
:param size: Size of figure in inches.

:returns: :class:`matplotlib.figure.Figure`

.. Note::
    See :func:`eqcorrscan.utils.plotting.obspy_3d_plot` for example output.