jupyter | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
New in 5.10
You can add persistent selections to a rendered figure using the Box Select and Lasso Select tools in the mode bar. To add multiple selections, select Shift when making new selections. To clear a selection, double-click it. On a subplot you can clear all selections by double-clicking any unselected area of the subplot.
You can also add selections to a figure that displays when it renders using fig.add_selection
.
Here, we add a rectangular selection with a region between 3.0
and 6.5
on the x axis and between 3.5
and 5.5
on the y axis.
import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length")
fig.add_selection(x0=3.0, y0=6.5, x1=3.5, y1=5.5)
fig.show()
In the above example, we added a rectangular selection. You can also render a custom SVG for a selection by defining a path
that can include single or multiple polygons. Here, we create a selection with a single polygon path "M2,6.5L4,7.5L4,6Z".
Please note that multiple polygons e.g. "M0,0L0,10L10,10,L10,0Z M2,2L2,8L8,8,L8,2Z" could be used to subtract certain regions from the selection.
import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length")
fig.add_selection(path="M2,6.5L4,7.5L4,6Z")
fig.show()
In the above example, we added a selection to the figure that is displayed when the figure renders.
fig.add_selection
accepts additional properties that you can use to style the selection. Here, we add a color
, width
, and specify the dash
type for the selection.
import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length")
fig.add_selection(
x0=2.5, y0=6.5, x1=3.5, y1=5.5,
line=dict(
color="Crimson",
width=2,
dash="dash",
))
fig.show()
You can style new selections made on the figure by setting properties on newselection
.
Try making a new selection on the figure to try it out.
import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length")
fig.update_layout(dragmode='select',
newselection=dict(line=dict(color='blue')))
fig.show()
You can style the active selection with activeselection
. In this example, we set active selections (when created or clicked) to appear with a fillcolor
of yellow
.
import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length")
fig.add_selection(x0=3.0, y0=6.5, x1=3.5, y1=5.5)
fig.update_layout(dragmode='select',
activeselection=dict(fillcolor='yellow'))
fig.show()
Selections are also supported on time series figures. Here, we add a rectangular selection with a region between the dates 2019-01-01"
and "2019-10-01"
on the x axis and between 0.95
and 1.15
on the y axis.
import plotly.express as px
df = px.data.stocks()
fig = px.line(df, x='date', y="GOOG", markers=True)
fig.add_selection(x0="2019-01-01", y0=0.95, x1="2019-10-01", y1=1.15)
fig.show()
You can add selections to multiple Cartesian subplots by specifying xref
and/or yref
. Here, we add one selection on the plot with axis ids x
and y2
and two selections to the the plot with axis ids x
and y
.
import plotly.graph_objects as go
import numpy as np
np.random.seed(0)
t = np.linspace(-1, 1.2, 2000)
x = (t**3) + (0.3 * np.random.randn(2000))
y = (t**6) + (0.3 * np.random.randn(2000))
fig = go.Figure()
fig.add_trace(go.Histogram2dContour(
x = x,
y = y,
colorscale = 'Blues',
reversescale = True,
xaxis = 'x',
yaxis = 'y'
))
fig.add_trace(go.Scatter(
x = x,
y = y,
xaxis = 'x',
yaxis = 'y',
mode = 'markers',
marker = dict(
color = 'rgba(0,0,0,0.3)',
size = 3
)
))
fig.add_trace(go.Histogram(
y = y,
xaxis = 'x2',
marker = dict(
color = 'rgba(0,0,0,1)'
)
))
fig.add_trace(go.Histogram(
x = x,
yaxis = 'y2',
marker = dict(
color = 'rgba(0,0,0,1)'
)
))
fig.update_layout(
autosize = False,
xaxis = dict(
zeroline = False,
domain = [0,0.85],
showgrid = False
),
yaxis = dict(
zeroline = False,
domain = [0,0.85],
showgrid = False
),
xaxis2 = dict(
zeroline = False,
domain = [0.85,1],
showgrid = False
),
yaxis2 = dict(
zeroline = False,
domain = [0.85,1],
showgrid = False
),
height = 600,
width = 600,
bargap = 0,
hovermode = 'closest',
showlegend = False,
selections = [
dict(
x0 = 0.5,
x1 = -0.5,
xref = "x",
y0 = 190,
y1= 0,
yref = "y2",
line = dict(
color="yellow"
)
),
dict(
x0 = -0.2,
x1 = -1.5,
xref = "x",
y0 = 2,
y1= -1,
yref = "y",
line = dict(
color="yellow"
)
),
dict(
path= "M0.75,2.39L0.98,3.38L1.46,3.68L1.80,3.35L2.01,2.51L1.67,1.15L1.18,0.50L0.65,0.66L0.54,0.83L0.49,1.56Z",
xref= 'x',
yref = 'y',
line = dict(
color='yellow'
)
)
]
)
fig.show()
You can add selections to a scatterplot matrix by specifying xref
and/or yref
. Here, we add one selection on the plot with axis ids x2
and y2
and another on the plot with ids x3
and y
.
import plotly.express as px
df = px.data.iris()
fig = px.scatter_matrix(df,
dimensions=["sepal_length", "sepal_width", "petal_length", "petal_width"],
color="species")
fig.update_layout(
xaxis = {"matches": "y"},
xaxis2 = {"matches": "y2"},
xaxis3 = {"matches": "y3"},
xaxis4 = {"matches": "y4"},
height = 900,
width = 750,
dragmode = 'select',
selections = [
dict(
x0 = 3,
x1 = 4,
xref = "x2",
y0 = 8,
y1= 6,
yref = "y"
),
dict(
x0 = 5,
x1 = 1,
xref = "x3",
y0 = 5,
y1= 4,
yref = "y",
)
]
)
fig.show()