def __init__(self, arg=None, customdata=None, customdatasrc=None, diagonal=None, dimensions=None, dimensiondefaults=None, hoverinfo=None, hoverinfosrc=None, hoverlabel=None, hovertemplate=None, hovertemplatesrc=None, hovertext=None, hovertextsrc=None, ids=None, idssrc=None, legendgroup=None, marker=None, name=None, opacity=None, selected=None, selectedpoints=None, showlegend=None, showlowerhalf=None, showupperhalf=None, stream=None, text=None, textsrc=None, uid=None, uirevision=None, unselected=None, visible=None, xaxes=None, yaxes=None, **kwargs):
    '\n        Construct a new Splom object\n        \n        Splom traces generate scatter plot matrix visualizations. Each\n        splom `dimensions` items correspond to a generated axis. Values\n        for each of those dimensions are set in `dimensions[i].values`.\n        Splom traces support all `scattergl` marker style attributes.\n        Specify `layout.grid` attributes and/or layout x-axis and\n        y-axis attributes for more control over the axis positioning\n        and style.\n\n        Parameters\n        ----------\n        arg\n            dict of properties compatible with this constructor or\n            an instance of plotly.graph_objs.Splom\n        customdata\n            Assigns extra data each datum. This may be useful when\n            listening to hover, click and selection events. Note\n            that, "scatter" traces also appends customdata items in\n            the markers DOM elements\n        customdatasrc\n            Sets the source reference on plot.ly for  customdata .\n        diagonal\n            plotly.graph_objs.splom.Diagonal instance or dict with\n            compatible properties\n        dimensions\n            plotly.graph_objs.splom.Dimension instance or dict with\n            compatible properties\n        dimensiondefaults\n            When used in a template (as\n            layout.template.data.splom.dimensiondefaults), sets the\n            default property values to use for elements of\n            splom.dimensions\n        hoverinfo\n            Determines which trace information appear on hover. If\n            `none` or `skip` are set, no information is displayed\n            upon hovering. But, if `none` is set, click and hover\n            events are still fired.\n        hoverinfosrc\n            Sets the source reference on plot.ly for  hoverinfo .\n        hoverlabel\n            plotly.graph_objs.splom.Hoverlabel instance or dict\n            with compatible properties\n        hovertemplate\n            Template string used for rendering the information that\n            appear on hover box. Note that this will override\n            `hoverinfo`. Variables are inserted using %{variable},\n            for example "y: %{y}". Numbers are formatted using\n            d3-format\'s syntax %{variable:d3-format}, for example\n            "Price: %{y:$.2f}". See https://github.com/d3/d3-format\n            /blob/master/README.md#locale_format for details on the\n            formatting syntax. The variables available in\n            `hovertemplate` are the ones emitted as event data\n            described at this link\n            https://plot.ly/javascript/plotlyjs-events/#event-data.\n            Additionally, every attributes that can be specified\n            per-point (the ones that are `arrayOk: true`) are\n            available.  Anything contained in tag `<extra>` is\n            displayed in the secondary box, for example\n            "<extra>{fullData.name}</extra>".\n        hovertemplatesrc\n            Sets the source reference on plot.ly for  hovertemplate\n            .\n        hovertext\n            Same as `text`.\n        hovertextsrc\n            Sets the source reference on plot.ly for  hovertext .\n        ids\n            Assigns id labels to each datum. These ids for object\n            constancy of data points during animation. Should be an\n            array of strings, not numbers or any other type.\n        idssrc\n            Sets the source reference on plot.ly for  ids .\n        legendgroup\n            Sets the legend group for this trace. Traces part of\n            the same legend group hide/show at the same time when\n            toggling legend items.\n        marker\n            plotly.graph_objs.splom.Marker instance or dict with\n            compatible properties\n        name\n            Sets the trace name. The trace name appear as the\n            legend item and on hover.\n        opacity\n            Sets the opacity of the trace.\n        selected\n            plotly.graph_objs.splom.Selected instance or dict with\n            compatible properties\n        selectedpoints\n            Array containing integer indices of selected points.\n            Has an effect only for traces that support selections.\n            Note that an empty array means an empty selection where\n            the `unselected` are turned on for all points, whereas,\n            any other non-array values means no selection all where\n            the `selected` and `unselected` styles have no effect.\n        showlegend\n            Determines whether or not an item corresponding to this\n            trace is shown in the legend.\n        showlowerhalf\n            Determines whether or not subplots on the lower half\n            from the diagonal are displayed.\n        showupperhalf\n            Determines whether or not subplots on the upper half\n            from the diagonal are displayed.\n        stream\n            plotly.graph_objs.splom.Stream instance or dict with\n            compatible properties\n        text\n            Sets text elements associated with each (x,y) pair to\n            appear on hover. If a single string, the same string\n            appears over all the data points. If an array of\n            string, the items are mapped in order to the this\n            trace\'s (x,y) coordinates.\n        textsrc\n            Sets the source reference on plot.ly for  text .\n        uid\n            Assign an id to this trace, Use this to provide object\n            constancy between traces during animations and\n            transitions.\n        uirevision\n            Controls persistence of some user-driven changes to the\n            trace: `constraintrange` in `parcoords` traces, as well\n            as some `editable: true` modifications such as `name`\n            and `colorbar.title`. Defaults to `layout.uirevision`.\n            Note that other user-driven trace attribute changes are\n            controlled by `layout` attributes: `trace.visible` is\n            controlled by `layout.legend.uirevision`,\n            `selectedpoints` is controlled by\n            `layout.selectionrevision`, and `colorbar.(x|y)`\n            (accessible with `config: {editable: true}`) is\n            controlled by `layout.editrevision`. Trace changes are\n            tracked by `uid`, which only falls back on trace index\n            if no `uid` is provided. So if your app can add/remove\n            traces before the end of the `data` array, such that\n            the same trace has a different index, you can still\n            preserve user-driven changes if you give each trace a\n            `uid` that stays with it as it moves.\n        unselected\n            plotly.graph_objs.splom.Unselected instance or dict\n            with compatible properties\n        visible\n            Determines whether or not this trace is visible. If\n            "legendonly", the trace is not drawn, but can appear as\n            a legend item (provided that the legend itself is\n            visible).\n        xaxes\n            Sets the list of x axes corresponding to dimensions of\n            this splom trace. By default, a splom will match the\n            first N xaxes where N is the number of input\n            dimensions. Note that, in case where `diagonal.visible`\n            is false and `showupperhalf` or `showlowerhalf` is\n            false, this splom trace will generate one less x-axis\n            and one less y-axis.\n        yaxes\n            Sets the list of y axes corresponding to dimensions of\n            this splom trace. By default, a splom will match the\n            first N yaxes where N is the number of input\n            dimensions. Note that, in case where `diagonal.visible`\n            is false and `showupperhalf` or `showlowerhalf` is\n            false, this splom trace will generate one less x-axis\n            and one less y-axis.\n\n        Returns\n        -------\n        Splom\n        '
    super(Splom, self).__init__('splom')
    if (arg is None):
        arg = {}
    elif isinstance(arg, self.__class__):
        arg = arg.to_plotly_json()
    elif isinstance(arg, dict):
        arg = copy.copy(arg)
    else:
        raise ValueError('The first argument to the plotly.graph_objs.Splom \nconstructor must be a dict or \nan instance of plotly.graph_objs.Splom')
    self._skip_invalid = kwargs.pop('skip_invalid', False)
    from plotly.validators import splom as v_splom
    self._validators['customdata'] = v_splom.CustomdataValidator()
    self._validators['customdatasrc'] = v_splom.CustomdatasrcValidator()
    self._validators['diagonal'] = v_splom.DiagonalValidator()
    self._validators['dimensions'] = v_splom.DimensionsValidator()
    self._validators['dimensiondefaults'] = v_splom.DimensionValidator()
    self._validators['hoverinfo'] = v_splom.HoverinfoValidator()
    self._validators['hoverinfosrc'] = v_splom.HoverinfosrcValidator()
    self._validators['hoverlabel'] = v_splom.HoverlabelValidator()
    self._validators['hovertemplate'] = v_splom.HovertemplateValidator()
    self._validators['hovertemplatesrc'] = v_splom.HovertemplatesrcValidator()
    self._validators['hovertext'] = v_splom.HovertextValidator()
    self._validators['hovertextsrc'] = v_splom.HovertextsrcValidator()
    self._validators['ids'] = v_splom.IdsValidator()
    self._validators['idssrc'] = v_splom.IdssrcValidator()
    self._validators['legendgroup'] = v_splom.LegendgroupValidator()
    self._validators['marker'] = v_splom.MarkerValidator()
    self._validators['name'] = v_splom.NameValidator()
    self._validators['opacity'] = v_splom.OpacityValidator()
    self._validators['selected'] = v_splom.SelectedValidator()
    self._validators['selectedpoints'] = v_splom.SelectedpointsValidator()
    self._validators['showlegend'] = v_splom.ShowlegendValidator()
    self._validators['showlowerhalf'] = v_splom.ShowlowerhalfValidator()
    self._validators['showupperhalf'] = v_splom.ShowupperhalfValidator()
    self._validators['stream'] = v_splom.StreamValidator()
    self._validators['text'] = v_splom.TextValidator()
    self._validators['textsrc'] = v_splom.TextsrcValidator()
    self._validators['uid'] = v_splom.UidValidator()
    self._validators['uirevision'] = v_splom.UirevisionValidator()
    self._validators['unselected'] = v_splom.UnselectedValidator()
    self._validators['visible'] = v_splom.VisibleValidator()
    self._validators['xaxes'] = v_splom.XaxesValidator()
    self._validators['yaxes'] = v_splom.YaxesValidator()
    _v = arg.pop('customdata', None)
    self['customdata'] = (customdata if (customdata is not None) else _v)
    _v = arg.pop('customdatasrc', None)
    self['customdatasrc'] = (customdatasrc if (customdatasrc is not None) else _v)
    _v = arg.pop('diagonal', None)
    self['diagonal'] = (diagonal if (diagonal is not None) else _v)
    _v = arg.pop('dimensions', None)
    self['dimensions'] = (dimensions if (dimensions is not None) else _v)
    _v = arg.pop('dimensiondefaults', None)
    self['dimensiondefaults'] = (dimensiondefaults if (dimensiondefaults is not None) else _v)
    _v = arg.pop('hoverinfo', None)
    self['hoverinfo'] = (hoverinfo if (hoverinfo is not None) else _v)
    _v = arg.pop('hoverinfosrc', None)
    self['hoverinfosrc'] = (hoverinfosrc if (hoverinfosrc is not None) else _v)
    _v = arg.pop('hoverlabel', None)
    self['hoverlabel'] = (hoverlabel if (hoverlabel is not None) else _v)
    _v = arg.pop('hovertemplate', None)
    self['hovertemplate'] = (hovertemplate if (hovertemplate is not None) else _v)
    _v = arg.pop('hovertemplatesrc', None)
    self['hovertemplatesrc'] = (hovertemplatesrc if (hovertemplatesrc is not None) else _v)
    _v = arg.pop('hovertext', None)
    self['hovertext'] = (hovertext if (hovertext is not None) else _v)
    _v = arg.pop('hovertextsrc', None)
    self['hovertextsrc'] = (hovertextsrc if (hovertextsrc is not None) else _v)
    _v = arg.pop('ids', None)
    self['ids'] = (ids if (ids is not None) else _v)
    _v = arg.pop('idssrc', None)
    self['idssrc'] = (idssrc if (idssrc is not None) else _v)
    _v = arg.pop('legendgroup', None)
    self['legendgroup'] = (legendgroup if (legendgroup is not None) else _v)
    _v = arg.pop('marker', None)
    self['marker'] = (marker if (marker is not None) else _v)
    _v = arg.pop('name', None)
    self['name'] = (name if (name is not None) else _v)
    _v = arg.pop('opacity', None)
    self['opacity'] = (opacity if (opacity is not None) else _v)
    _v = arg.pop('selected', None)
    self['selected'] = (selected if (selected is not None) else _v)
    _v = arg.pop('selectedpoints', None)
    self['selectedpoints'] = (selectedpoints if (selectedpoints is not None) else _v)
    _v = arg.pop('showlegend', None)
    self['showlegend'] = (showlegend if (showlegend is not None) else _v)
    _v = arg.pop('showlowerhalf', None)
    self['showlowerhalf'] = (showlowerhalf if (showlowerhalf is not None) else _v)
    _v = arg.pop('showupperhalf', None)
    self['showupperhalf'] = (showupperhalf if (showupperhalf is not None) else _v)
    _v = arg.pop('stream', None)
    self['stream'] = (stream if (stream is not None) else _v)
    _v = arg.pop('text', None)
    self['text'] = (text if (text is not None) else _v)
    _v = arg.pop('textsrc', None)
    self['textsrc'] = (textsrc if (textsrc is not None) else _v)
    _v = arg.pop('uid', None)
    self['uid'] = (uid if (uid is not None) else _v)
    _v = arg.pop('uirevision', None)
    self['uirevision'] = (uirevision if (uirevision is not None) else _v)
    _v = arg.pop('unselected', None)
    self['unselected'] = (unselected if (unselected is not None) else _v)
    _v = arg.pop('visible', None)
    self['visible'] = (visible if (visible is not None) else _v)
    _v = arg.pop('xaxes', None)
    self['xaxes'] = (xaxes if (xaxes is not None) else _v)
    _v = arg.pop('yaxes', None)
    self['yaxes'] = (yaxes if (yaxes is not None) else _v)
    from _plotly_utils.basevalidators import LiteralValidator
    self._props['type'] = 'splom'
    self._validators['type'] = LiteralValidator(plotly_name='type', parent_name='splom', val='splom')
    arg.pop('type', None)
    self._process_kwargs(**dict(arg, **kwargs))
    self._skip_invalid = False
Construct a new Splom object

Splom traces generate scatter plot matrix visualizations. Each
splom `dimensions` items correspond to a generated axis. Values
for each of those dimensions are set in `dimensions[i].values`.
Splom traces support all `scattergl` marker style attributes.
Specify `layout.grid` attributes and/or layout x-axis and
y-axis attributes for more control over the axis positioning
and style.

Parameters
----------
arg
    dict of properties compatible with this constructor or
    an instance of plotly.graph_objs.Splom
customdata
    Assigns extra data each datum. This may be useful when
    listening to hover, click and selection events. Note
    that, "scatter" traces also appends customdata items in
    the markers DOM elements
customdatasrc
    Sets the source reference on plot.ly for  customdata .
diagonal
    plotly.graph_objs.splom.Diagonal instance or dict with
    compatible properties
dimensions
    plotly.graph_objs.splom.Dimension instance or dict with
    compatible properties
dimensiondefaults
    When used in a template (as
    layout.template.data.splom.dimensiondefaults), sets the
    default property values to use for elements of
    splom.dimensions
hoverinfo
    Determines which trace information appear on hover. If
    `none` or `skip` are set, no information is displayed
    upon hovering. But, if `none` is set, click and hover
    events are still fired.
hoverinfosrc
    Sets the source reference on plot.ly for  hoverinfo .
hoverlabel
    plotly.graph_objs.splom.Hoverlabel instance or dict
    with compatible properties
hovertemplate
    Template string used for rendering the information that
    appear on hover box. Note that this will override
    `hoverinfo`. Variables are inserted using %{variable},
    for example "y: %{y}". Numbers are formatted using
    d3-format's syntax %{variable:d3-format}, for example
    "Price: %{y:$.2f}". See https://github.com/d3/d3-format
    /blob/master/README.md#locale_format for details on the
    formatting syntax. The variables available in
    `hovertemplate` are the ones emitted as event data
    described at this link
    https://plot.ly/javascript/plotlyjs-events/#event-data.
    Additionally, every attributes that can be specified
    per-point (the ones that are `arrayOk: true`) are
    available.  Anything contained in tag `<extra>` is
    displayed in the secondary box, for example
    "<extra>{fullData.name}</extra>".
hovertemplatesrc
    Sets the source reference on plot.ly for  hovertemplate
    .
hovertext
    Same as `text`.
hovertextsrc
    Sets the source reference on plot.ly for  hovertext .
ids
    Assigns id labels to each datum. These ids for object
    constancy of data points during animation. Should be an
    array of strings, not numbers or any other type.
idssrc
    Sets the source reference on plot.ly for  ids .
legendgroup
    Sets the legend group for this trace. Traces part of
    the same legend group hide/show at the same time when
    toggling legend items.
marker
    plotly.graph_objs.splom.Marker instance or dict with
    compatible properties
name
    Sets the trace name. The trace name appear as the
    legend item and on hover.
opacity
    Sets the opacity of the trace.
selected
    plotly.graph_objs.splom.Selected instance or dict with
    compatible properties
selectedpoints
    Array containing integer indices of selected points.
    Has an effect only for traces that support selections.
    Note that an empty array means an empty selection where
    the `unselected` are turned on for all points, whereas,
    any other non-array values means no selection all where
    the `selected` and `unselected` styles have no effect.
showlegend
    Determines whether or not an item corresponding to this
    trace is shown in the legend.
showlowerhalf
    Determines whether or not subplots on the lower half
    from the diagonal are displayed.
showupperhalf
    Determines whether or not subplots on the upper half
    from the diagonal are displayed.
stream
    plotly.graph_objs.splom.Stream instance or dict with
    compatible properties
text
    Sets text elements associated with each (x,y) pair to
    appear on hover. If a single string, the same string
    appears over all the data points. If an array of
    string, the items are mapped in order to the this
    trace's (x,y) coordinates.
textsrc
    Sets the source reference on plot.ly for  text .
uid
    Assign an id to this trace, Use this to provide object
    constancy between traces during animations and
    transitions.
uirevision
    Controls persistence of some user-driven changes to the
    trace: `constraintrange` in `parcoords` traces, as well
    as some `editable: true` modifications such as `name`
    and `colorbar.title`. Defaults to `layout.uirevision`.
    Note that other user-driven trace attribute changes are
    controlled by `layout` attributes: `trace.visible` is
    controlled by `layout.legend.uirevision`,
    `selectedpoints` is controlled by
    `layout.selectionrevision`, and `colorbar.(x|y)`
    (accessible with `config: {editable: true}`) is
    controlled by `layout.editrevision`. Trace changes are
    tracked by `uid`, which only falls back on trace index
    if no `uid` is provided. So if your app can add/remove
    traces before the end of the `data` array, such that
    the same trace has a different index, you can still
    preserve user-driven changes if you give each trace a
    `uid` that stays with it as it moves.
unselected
    plotly.graph_objs.splom.Unselected instance or dict
    with compatible properties
visible
    Determines whether or not this trace is visible. If
    "legendonly", the trace is not drawn, but can appear as
    a legend item (provided that the legend itself is
    visible).
xaxes
    Sets the list of x axes corresponding to dimensions of
    this splom trace. By default, a splom will match the
    first N xaxes where N is the number of input
    dimensions. Note that, in case where `diagonal.visible`
    is false and `showupperhalf` or `showlowerhalf` is
    false, this splom trace will generate one less x-axis
    and one less y-axis.
yaxes
    Sets the list of y axes corresponding to dimensions of
    this splom trace. By default, a splom will match the
    first N yaxes where N is the number of input
    dimensions. Note that, in case where `diagonal.visible`
    is false and `showupperhalf` or `showlowerhalf` is
    false, this splom trace will generate one less x-axis
    and one less y-axis.

Returns
-------
Splom
def __init__(self, arg=None, customdata=None, customdatasrc=None, diagonal=None, dimensions=None, dimensiondefaults=None, hoverinfo=None, hoverinfosrc=None, hoverlabel=None, hovertemplate=None, hovertemplatesrc=None, hovertext=None, hovertextsrc=None, ids=None, idssrc=None, legendgroup=None, marker=None, name=None, opacity=None, selected=None, selectedpoints=None, showlegend=None, showlowerhalf=None, showupperhalf=None, stream=None, text=None, textsrc=None, uid=None, uirevision=None, unselected=None, visible=None, xaxes=None, yaxes=None, **kwargs):
    '\n        Construct a new Splom object\n        \n        Splom traces generate scatter plot matrix visualizations. Each\n        splom `dimensions` items correspond to a generated axis. Values\n        for each of those dimensions are set in `dimensions[i].values`.\n        Splom traces support all `scattergl` marker style attributes.\n        Specify `layout.grid` attributes and/or layout x-axis and\n        y-axis attributes for more control over the axis positioning\n        and style.\n\n        Parameters\n        ----------\n        arg\n            dict of properties compatible with this constructor or\n            an instance of plotly.graph_objs.Splom\n        customdata\n            Assigns extra data each datum. This may be useful when\n            listening to hover, click and selection events. Note\n            that, "scatter" traces also appends customdata items in\n            the markers DOM elements\n        customdatasrc\n            Sets the source reference on plot.ly for  customdata .\n        diagonal\n            plotly.graph_objs.splom.Diagonal instance or dict with\n            compatible properties\n        dimensions\n            plotly.graph_objs.splom.Dimension instance or dict with\n            compatible properties\n        dimensiondefaults\n            When used in a template (as\n            layout.template.data.splom.dimensiondefaults), sets the\n            default property values to use for elements of\n            splom.dimensions\n        hoverinfo\n            Determines which trace information appear on hover. If\n            `none` or `skip` are set, no information is displayed\n            upon hovering. But, if `none` is set, click and hover\n            events are still fired.\n        hoverinfosrc\n            Sets the source reference on plot.ly for  hoverinfo .\n        hoverlabel\n            plotly.graph_objs.splom.Hoverlabel instance or dict\n            with compatible properties\n        hovertemplate\n            Template string used for rendering the information that\n            appear on hover box. Note that this will override\n            `hoverinfo`. Variables are inserted using %{variable},\n            for example "y: %{y}". Numbers are formatted using\n            d3-format\'s syntax %{variable:d3-format}, for example\n            "Price: %{y:$.2f}". See https://github.com/d3/d3-format\n            /blob/master/README.md#locale_format for details on the\n            formatting syntax. The variables available in\n            `hovertemplate` are the ones emitted as event data\n            described at this link\n            https://plot.ly/javascript/plotlyjs-events/#event-data.\n            Additionally, every attributes that can be specified\n            per-point (the ones that are `arrayOk: true`) are\n            available.  Anything contained in tag `<extra>` is\n            displayed in the secondary box, for example\n            "<extra>{fullData.name}</extra>".\n        hovertemplatesrc\n            Sets the source reference on plot.ly for  hovertemplate\n            .\n        hovertext\n            Same as `text`.\n        hovertextsrc\n            Sets the source reference on plot.ly for  hovertext .\n        ids\n            Assigns id labels to each datum. These ids for object\n            constancy of data points during animation. Should be an\n            array of strings, not numbers or any other type.\n        idssrc\n            Sets the source reference on plot.ly for  ids .\n        legendgroup\n            Sets the legend group for this trace. Traces part of\n            the same legend group hide/show at the same time when\n            toggling legend items.\n        marker\n            plotly.graph_objs.splom.Marker instance or dict with\n            compatible properties\n        name\n            Sets the trace name. The trace name appear as the\n            legend item and on hover.\n        opacity\n            Sets the opacity of the trace.\n        selected\n            plotly.graph_objs.splom.Selected instance or dict with\n            compatible properties\n        selectedpoints\n            Array containing integer indices of selected points.\n            Has an effect only for traces that support selections.\n            Note that an empty array means an empty selection where\n            the `unselected` are turned on for all points, whereas,\n            any other non-array values means no selection all where\n            the `selected` and `unselected` styles have no effect.\n        showlegend\n            Determines whether or not an item corresponding to this\n            trace is shown in the legend.\n        showlowerhalf\n            Determines whether or not subplots on the lower half\n            from the diagonal are displayed.\n        showupperhalf\n            Determines whether or not subplots on the upper half\n            from the diagonal are displayed.\n        stream\n            plotly.graph_objs.splom.Stream instance or dict with\n            compatible properties\n        text\n            Sets text elements associated with each (x,y) pair to\n            appear on hover. If a single string, the same string\n            appears over all the data points. If an array of\n            string, the items are mapped in order to the this\n            trace\'s (x,y) coordinates.\n        textsrc\n            Sets the source reference on plot.ly for  text .\n        uid\n            Assign an id to this trace, Use this to provide object\n            constancy between traces during animations and\n            transitions.\n        uirevision\n            Controls persistence of some user-driven changes to the\n            trace: `constraintrange` in `parcoords` traces, as well\n            as some `editable: true` modifications such as `name`\n            and `colorbar.title`. Defaults to `layout.uirevision`.\n            Note that other user-driven trace attribute changes are\n            controlled by `layout` attributes: `trace.visible` is\n            controlled by `layout.legend.uirevision`,\n            `selectedpoints` is controlled by\n            `layout.selectionrevision`, and `colorbar.(x|y)`\n            (accessible with `config: {editable: true}`) is\n            controlled by `layout.editrevision`. Trace changes are\n            tracked by `uid`, which only falls back on trace index\n            if no `uid` is provided. So if your app can add/remove\n            traces before the end of the `data` array, such that\n            the same trace has a different index, you can still\n            preserve user-driven changes if you give each trace a\n            `uid` that stays with it as it moves.\n        unselected\n            plotly.graph_objs.splom.Unselected instance or dict\n            with compatible properties\n        visible\n            Determines whether or not this trace is visible. If\n            "legendonly", the trace is not drawn, but can appear as\n            a legend item (provided that the legend itself is\n            visible).\n        xaxes\n            Sets the list of x axes corresponding to dimensions of\n            this splom trace. By default, a splom will match the\n            first N xaxes where N is the number of input\n            dimensions. Note that, in case where `diagonal.visible`\n            is false and `showupperhalf` or `showlowerhalf` is\n            false, this splom trace will generate one less x-axis\n            and one less y-axis.\n        yaxes\n            Sets the list of y axes corresponding to dimensions of\n            this splom trace. By default, a splom will match the\n            first N yaxes where N is the number of input\n            dimensions. Note that, in case where `diagonal.visible`\n            is false and `showupperhalf` or `showlowerhalf` is\n            false, this splom trace will generate one less x-axis\n            and one less y-axis.\n\n        Returns\n        -------\n        Splom\n        '
    super(Splom, self).__init__('splom')
    if (arg is None):
        arg = {}
    elif isinstance(arg, self.__class__):
        arg = arg.to_plotly_json()
    elif isinstance(arg, dict):
        arg = copy.copy(arg)
    else:
        raise ValueError('The first argument to the plotly.graph_objs.Splom \nconstructor must be a dict or \nan instance of plotly.graph_objs.Splom')
    self._skip_invalid = kwargs.pop('skip_invalid', False)
    from plotly.validators import splom as v_splom
    self._validators['customdata'] = v_splom.CustomdataValidator()
    self._validators['customdatasrc'] = v_splom.CustomdatasrcValidator()
    self._validators['diagonal'] = v_splom.DiagonalValidator()
    self._validators['dimensions'] = v_splom.DimensionsValidator()
    self._validators['dimensiondefaults'] = v_splom.DimensionValidator()
    self._validators['hoverinfo'] = v_splom.HoverinfoValidator()
    self._validators['hoverinfosrc'] = v_splom.HoverinfosrcValidator()
    self._validators['hoverlabel'] = v_splom.HoverlabelValidator()
    self._validators['hovertemplate'] = v_splom.HovertemplateValidator()
    self._validators['hovertemplatesrc'] = v_splom.HovertemplatesrcValidator()
    self._validators['hovertext'] = v_splom.HovertextValidator()
    self._validators['hovertextsrc'] = v_splom.HovertextsrcValidator()
    self._validators['ids'] = v_splom.IdsValidator()
    self._validators['idssrc'] = v_splom.IdssrcValidator()
    self._validators['legendgroup'] = v_splom.LegendgroupValidator()
    self._validators['marker'] = v_splom.MarkerValidator()
    self._validators['name'] = v_splom.NameValidator()
    self._validators['opacity'] = v_splom.OpacityValidator()
    self._validators['selected'] = v_splom.SelectedValidator()
    self._validators['selectedpoints'] = v_splom.SelectedpointsValidator()
    self._validators['showlegend'] = v_splom.ShowlegendValidator()
    self._validators['showlowerhalf'] = v_splom.ShowlowerhalfValidator()
    self._validators['showupperhalf'] = v_splom.ShowupperhalfValidator()
    self._validators['stream'] = v_splom.StreamValidator()
    self._validators['text'] = v_splom.TextValidator()
    self._validators['textsrc'] = v_splom.TextsrcValidator()
    self._validators['uid'] = v_splom.UidValidator()
    self._validators['uirevision'] = v_splom.UirevisionValidator()
    self._validators['unselected'] = v_splom.UnselectedValidator()
    self._validators['visible'] = v_splom.VisibleValidator()
    self._validators['xaxes'] = v_splom.XaxesValidator()
    self._validators['yaxes'] = v_splom.YaxesValidator()
    _v = arg.pop('customdata', None)
    self['customdata'] = (customdata if (customdata is not None) else _v)
    _v = arg.pop('customdatasrc', None)
    self['customdatasrc'] = (customdatasrc if (customdatasrc is not None) else _v)
    _v = arg.pop('diagonal', None)
    self['diagonal'] = (diagonal if (diagonal is not None) else _v)
    _v = arg.pop('dimensions', None)
    self['dimensions'] = (dimensions if (dimensions is not None) else _v)
    _v = arg.pop('dimensiondefaults', None)
    self['dimensiondefaults'] = (dimensiondefaults if (dimensiondefaults is not None) else _v)
    _v = arg.pop('hoverinfo', None)
    self['hoverinfo'] = (hoverinfo if (hoverinfo is not None) else _v)
    _v = arg.pop('hoverinfosrc', None)
    self['hoverinfosrc'] = (hoverinfosrc if (hoverinfosrc is not None) else _v)
    _v = arg.pop('hoverlabel', None)
    self['hoverlabel'] = (hoverlabel if (hoverlabel is not None) else _v)
    _v = arg.pop('hovertemplate', None)
    self['hovertemplate'] = (hovertemplate if (hovertemplate is not None) else _v)
    _v = arg.pop('hovertemplatesrc', None)
    self['hovertemplatesrc'] = (hovertemplatesrc if (hovertemplatesrc is not None) else _v)
    _v = arg.pop('hovertext', None)
    self['hovertext'] = (hovertext if (hovertext is not None) else _v)
    _v = arg.pop('hovertextsrc', None)
    self['hovertextsrc'] = (hovertextsrc if (hovertextsrc is not None) else _v)
    _v = arg.pop('ids', None)
    self['ids'] = (ids if (ids is not None) else _v)
    _v = arg.pop('idssrc', None)
    self['idssrc'] = (idssrc if (idssrc is not None) else _v)
    _v = arg.pop('legendgroup', None)
    self['legendgroup'] = (legendgroup if (legendgroup is not None) else _v)
    _v = arg.pop('marker', None)
    self['marker'] = (marker if (marker is not None) else _v)
    _v = arg.pop('name', None)
    self['name'] = (name if (name is not None) else _v)
    _v = arg.pop('opacity', None)
    self['opacity'] = (opacity if (opacity is not None) else _v)
    _v = arg.pop('selected', None)
    self['selected'] = (selected if (selected is not None) else _v)
    _v = arg.pop('selectedpoints', None)
    self['selectedpoints'] = (selectedpoints if (selectedpoints is not None) else _v)
    _v = arg.pop('showlegend', None)
    self['showlegend'] = (showlegend if (showlegend is not None) else _v)
    _v = arg.pop('showlowerhalf', None)
    self['showlowerhalf'] = (showlowerhalf if (showlowerhalf is not None) else _v)
    _v = arg.pop('showupperhalf', None)
    self['showupperhalf'] = (showupperhalf if (showupperhalf is not None) else _v)
    _v = arg.pop('stream', None)
    self['stream'] = (stream if (stream is not None) else _v)
    _v = arg.pop('text', None)
    self['text'] = (text if (text is not None) else _v)
    _v = arg.pop('textsrc', None)
    self['textsrc'] = (textsrc if (textsrc is not None) else _v)
    _v = arg.pop('uid', None)
    self['uid'] = (uid if (uid is not None) else _v)
    _v = arg.pop('uirevision', None)
    self['uirevision'] = (uirevision if (uirevision is not None) else _v)
    _v = arg.pop('unselected', None)
    self['unselected'] = (unselected if (unselected is not None) else _v)
    _v = arg.pop('visible', None)
    self['visible'] = (visible if (visible is not None) else _v)
    _v = arg.pop('xaxes', None)
    self['xaxes'] = (xaxes if (xaxes is not None) else _v)
    _v = arg.pop('yaxes', None)
    self['yaxes'] = (yaxes if (yaxes is not None) else _v)
    from _plotly_utils.basevalidators import LiteralValidator
    self._props['type'] = 'splom'
    self._validators['type'] = LiteralValidator(plotly_name='type', parent_name='splom', val='splom')
    arg.pop('type', None)
    self._process_kwargs(**dict(arg, **kwargs))
    self._skip_invalid = False