Plotly Express is a terse, consistent, high-level API for creating figures.
Plotly Studio: Transform any dataset into an interactive data application in minutes with AI. Sign up for early access now.
Overview¶The plotly.express
module (usually imported as px
) contains functions that can create entire figures at once, and is referred to as Plotly Express or PX. Plotly Express is a built-in part of the plotly
library, and is the recommended starting point for creating most common figures. Every Plotly Express function uses graph objects internally and returns a plotly.graph_objects.Figure
instance. Throughout the plotly
documentation, you will find the Plotly Express way of building figures at the top of any applicable page, followed by a section on how to use graph objects to build similar figures. Any figure created in a single function call with Plotly Express could be created using graph objects alone, but with between 5 and 100 times more code.
Plotly Express provides more than 30 functions for creating different types of figures. The API for these functions was carefully designed to be as consistent and easy to learn as possible, making it easy to switch from a scatter plot to a bar chart to a histogram to a sunburst chart throughout a data exploration session. Scroll down for a gallery of Plotly Express plots, each made in a single function call.
Here is a talk from the SciPy 2021 conference that gives a good introduction to Plotly Express and Dash:
Plotly Express currently includes the following functions:
scatter
, line
, area
, bar
, funnel
, timeline
pie
, sunburst
, treemap
, icicle
, funnel_area
histogram
, box
, violin
, strip
, ecdf
density_heatmap
, density_contour
imshow
scatter_3d
, line_3d
scatter_matrix
, parallel_coordinates
, parallel_categories
scatter_map
, line_map
, choropleth_map
, density_map
scatter_geo
, line_geo
, choropleth
scatter_polar
, line_polar
, bar_polar
scatter_ternary
, line_ternary
The Plotly Express API in general offers the following features:
plotly
: just import plotly.express as px
and get access to all the plotting functions, plus built-in demo datasets under px.data
and built-in color scales and sequences under px.color
. Every PX function returns a plotly.graph_objects.Figure
object, so you can edit it using all the same methods like update_layout
and add_trace
.list
s and dict
s to long-form or wide-form DataFrame
s to numpy
arrays and xarrays
to GeoPandas GeoDataFrames
.legendgroup
and showlegend
attributes are set such that only one legend item appears per unique combination of discrete color, symbol and/or line-dash. Traces are automatically linked to a correctly-configured subplot of the appropriate type.DataFrame
or xarray
, and provide extra control with the labels
argument.hover_name
and hover_data
arguments.category_orders
and color_discrete_map
to precisely control categorical variables.facet_row
, facet_col
and facet_col_wrap
arguments.marginal
, marginal_x
and marginal_y
arguments.df.plot()
.px.scatter
supports built-in trendlines with accessible model output.animation_frame
and animation_group
arguments.Dash is the best way to build analytical apps in Python using Plotly figures. To run the app below, run pip install dash
, click "Download" to get the code and run python app.py
.
Get started with the official Dash docs and learn how to effortlessly style & deploy apps like this with Dash Enterprise.
Gallery¶The following set of figures is just a sampling of what can be done with Plotly Express.
Scatter, Line, Area and Bar Charts¶Read more about scatter plots and discrete color.
In [3]:
import plotly.express as px df = px.data.iris() fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species") fig.show()
In [4]:
import plotly.express as px df = px.data.iris() fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species", marginal_y="violin", marginal_x="box", trendline="ols", template="simple_white") fig.show()
In [5]:
import plotly.express as px df = px.data.iris() df["e"] = df["sepal_width"]/100 fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species", error_x="e", error_y="e") fig.show()
In [6]:
import plotly.express as px df = px.data.tips() fig = px.bar(df, x="sex", y="total_bill", color="smoker", barmode="group") fig.show()
In [7]:
import plotly.express as px df = px.data.medals_long() fig = px.bar(df, x="medal", y="count", color="nation", pattern_shape="nation", pattern_shape_sequence=[".", "x", "+"]) fig.show()
In [8]:
import plotly.express as px df = px.data.tips() fig = px.bar(df, x="sex", y="total_bill", color="smoker", barmode="group", facet_row="time", facet_col="day", category_orders={"day": ["Thur", "Fri", "Sat", "Sun"], "time": ["Lunch", "Dinner"]}) fig.show()
In [9]:
import plotly.express as px df = px.data.iris() fig = px.scatter_matrix(df, dimensions=["sepal_width", "sepal_length", "petal_width", "petal_length"], color="species") fig.show()
In [10]:
import plotly.express as px df = px.data.iris() fig = px.parallel_coordinates(df, color="species_id", labels={"species_id": "Species", "sepal_width": "Sepal Width", "sepal_length": "Sepal Length", "petal_width": "Petal Width", "petal_length": "Petal Length", }, color_continuous_scale=px.colors.diverging.Tealrose, color_continuous_midpoint=2) fig.show()
In [11]:
import plotly.express as px df = px.data.tips() fig = px.parallel_categories(df, color="size", color_continuous_scale=px.colors.sequential.Inferno) fig.show()
In [12]:
import plotly.express as px df = px.data.gapminder() fig = px.scatter(df.query("year==2007"), x="gdpPercap", y="lifeExp", size="pop", color="continent", hover_name="country", log_x=True, size_max=60) fig.show()
In [13]:
import plotly.express as px df = px.data.gapminder() fig = px.scatter(df, x="gdpPercap", y="lifeExp", animation_frame="year", animation_group="country", size="pop", color="continent", hover_name="country", facet_col="continent", log_x=True, size_max=45, range_x=[100,100000], range_y=[25,90]) fig.show()
In [14]:
import plotly.express as px df = px.data.gapminder() fig = px.line(df, x="year", y="lifeExp", color="continent", line_group="country", hover_name="country", line_shape="spline", render_mode="svg") fig.show()
In [15]:
import plotly.express as px df = px.data.gapminder() fig = px.area(df, x="year", y="pop", color="continent", line_group="country") fig.show()
In [16]:
import plotly.express as px import pandas as pd df = pd.DataFrame([ dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28', Resource="Alex"), dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15', Resource="Alex"), dict(Task="Job C", Start='2009-02-20', Finish='2009-05-30', Resource="Max") ]) fig = px.timeline(df, x_start="Start", x_end="Finish", y="Resource", color="Resource") fig.show()
In [17]:
import plotly.express as px data = dict( number=[39, 27.4, 20.6, 11, 2], stage=["Website visit", "Downloads", "Potential customers", "Requested price", "Invoice sent"]) fig = px.funnel(data, x='number', y='stage') fig.show()
In [18]:
import plotly.express as px df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'") df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries' # Represent only large countries fig = px.pie(df, values='pop', names='country', title='Population of European continent') fig.show()
In [19]:
import plotly.express as px df = px.data.gapminder().query("year == 2007") fig = px.sunburst(df, path=['continent', 'country'], values='pop', color='lifeExp', hover_data=['iso_alpha']) fig.show()
In [20]:
import plotly.express as px import numpy as np df = px.data.gapminder().query("year == 2007") fig = px.treemap(df, path=[px.Constant('world'), 'continent', 'country'], values='pop', color='lifeExp', hover_data=['iso_alpha']) fig.show()
In [21]:
import plotly.express as px import numpy as np df = px.data.gapminder().query("year == 2007") fig = px.icicle(df, path=[px.Constant('world'), 'continent', 'country'], values='pop', color='lifeExp', hover_data=['iso_alpha']) fig.show()
In [22]:
import plotly.express as px df = px.data.tips() fig = px.histogram(df, x="total_bill", y="tip", color="sex", marginal="rug", hover_data=df.columns) fig.show()
In [23]:
import plotly.express as px df = px.data.tips() fig = px.box(df, x="day", y="total_bill", color="smoker", notched=True) fig.show()
In [24]:
import plotly.express as px df = px.data.tips() fig = px.violin(df, y="tip", x="smoker", color="sex", box=True, points="all", hover_data=df.columns) fig.show()
In [25]:
import plotly.express as px df = px.data.tips() fig = px.ecdf(df, x="total_bill", color="sex") fig.show()
In [26]:
import plotly.express as px df = px.data.tips() fig = px.strip(df, x="total_bill", y="time", orientation="h", color="smoker") fig.show()
In [27]:
import plotly.express as px df = px.data.iris() fig = px.density_contour(df, x="sepal_width", y="sepal_length") fig.show()
In [28]:
import plotly.express as px df = px.data.iris() fig = px.density_heatmap(df, x="sepal_width", y="sepal_length", marginal_x="rug", marginal_y="histogram") fig.show()
In [29]:
import plotly.express as px data=[[1, 25, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, 5, 20]] fig = px.imshow(data, labels=dict(x="Day of Week", y="Time of Day", color="Productivity"), x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'], y=['Morning', 'Afternoon', 'Evening'] ) fig.update_xaxes(side="top") fig.show()
In [30]:
import plotly.express as px from skimage import io img = io.imread('https://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Crab_Nebula.jpg/240px-Crab_Nebula.jpg') fig = px.imshow(img) fig.show()
In [31]:
import plotly.express as px df = px.data.carshare() fig = px.scatter_map(df, lat="centroid_lat", lon="centroid_lon", color="peak_hour", size="car_hours", color_continuous_scale=px.colors.cyclical.IceFire, size_max=15, zoom=10, map_style="carto-positron") fig.show()
In [32]:
import plotly.express as px df = px.data.election() geojson = px.data.election_geojson() fig = px.choropleth_map(df, geojson=geojson, color="Bergeron", locations="district", featureidkey="properties.district", center={"lat": 45.5517, "lon": -73.7073}, map_style="carto-positron", zoom=9) fig.show()
In [33]:
import plotly.express as px df = px.data.gapminder() fig = px.scatter_geo(df, locations="iso_alpha", color="continent", hover_name="country", size="pop", animation_frame="year", projection="natural earth") fig.show()
In [34]:
import plotly.express as px df = px.data.gapminder() fig = px.choropleth(df, locations="iso_alpha", color="lifeExp", hover_name="country", animation_frame="year", range_color=[20,80]) fig.show()
In [35]:
import plotly.express as px df = px.data.wind() fig = px.scatter_polar(df, r="frequency", theta="direction", color="strength", symbol="strength", color_discrete_sequence=px.colors.sequential.Plasma_r) fig.show()
In [36]:
import plotly.express as px df = px.data.wind() fig = px.line_polar(df, r="frequency", theta="direction", color="strength", line_close=True, color_discrete_sequence=px.colors.sequential.Plasma_r) fig.show()
In [37]:
import plotly.express as px df = px.data.wind() fig = px.bar_polar(df, r="frequency", theta="direction", color="strength", template="plotly_dark", color_discrete_sequence= px.colors.sequential.Plasma_r) fig.show()
In [38]:
import plotly.express as px df = px.data.election() fig = px.scatter_3d(df, x="Joly", y="Coderre", z="Bergeron", color="winner", size="total", hover_name="district", symbol="result", color_discrete_map = {"Joly": "blue", "Bergeron": "green", "Coderre":"red"}) fig.show()
In [39]:
import plotly.express as px df = px.data.election() fig = px.scatter_ternary(df, a="Joly", b="Coderre", c="Bergeron", color="winner", size="total", hover_name="district", size_max=15, color_discrete_map = {"Joly": "blue", "Bergeron": "green", "Coderre":"red"} ) fig.show()What About Dash?¶
Dash is an open-source framework for building analytical applications, with no Javascript required, and it is tightly integrated with the Plotly graphing library.
Learn about how to install Dash at https://dash.plot.ly/installation.
Everywhere in this page that you see fig.show()
, you can display the same figure in a Dash application by passing it to the figure
argument of the Graph
component from the built-in dash_core_components
package like this:
import plotly.graph_objects as go # or plotly.express as px fig = go.Figure() # or any Plotly Express function e.g. px.bar(...) # fig.add_trace( ... ) # fig.update_layout( ... ) from dash import Dash, dcc, html app = Dash() app.layout = html.Div([ dcc.Graph(figure=fig) ]) app.run(debug=True, use_reloader=False) # Turn off reloader if inside Jupyter
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4