--- jupyter: jupytext: notebook_metadata_filter: all text_representation: extension: .md format_name: markdown format_version: '1.2' jupytext_version: 1.4.2 kernelspec: display_name: Python 3 language: python name: python3 language_info: codemirror_mode: name: ipython version: 3 file_extension: .py mimetype: text/x-python name: python nbconvert_exporter: python pygments_lexer: ipython3 version: 3.7.7 plotly: description: How to make dot plots in Python with Plotly. display_as: basic language: python layout: base name: Dot Plots order: 6 page_type: u-guide permalink: python/dot-plots/ thumbnail: thumbnail/dot-plot.jpg --- #### Basic Dot Plot Dot plots (also known as [Cleveland dot plots]()) are [scatter plots](https://plotly.com/python/line-and-scatter/) with one categorical axis and one continuous axis. They can be used to show changes between two (or more) points in time or between two (or more) conditions. Compared to a [bar chart](/python/bar-charts/), dot plots can be less cluttered and allow for an easier comparison between conditions. For the same data, we show below how to create a dot plot using either `px.scatter` or `go.Scatter`. [Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/). ```python import plotly.express as px df = px.data.medals_long() fig = px.scatter(df, y="nation", x="count", color="medal", symbol="medal") fig.update_traces(marker_size=10) fig.show() ``` ```python import plotly.express as px import pandas as pd schools = ["Brown", "NYU", "Notre Dame", "Cornell", "Tufts", "Yale", "Dartmouth", "Chicago", "Columbia", "Duke", "Georgetown", "Princeton", "U.Penn", "Stanford", "MIT", "Harvard"] n_schools = len(schools) women_salary = [72, 67, 73, 80, 76, 79, 84, 78, 86, 93, 94, 90, 92, 96, 94, 112] men_salary = [92, 94, 100, 107, 112, 114, 114, 118, 119, 124, 131, 137, 141, 151, 152, 165] df = pd.DataFrame(dict(school=schools*2, salary=men_salary + women_salary, gender=["Men"]*n_schools + ["Women"]*n_schools)) # Use column names of df for the different parameters x, y, color, ... fig = px.scatter(df, x="salary", y="school", color="gender", title="Gender Earnings Disparity", labels={"salary":"Annual Salary (in thousands)"} # customize axis label ) fig.show() ``` ```python import plotly.graph_objects as go schools = ["Brown", "NYU", "Notre Dame", "Cornell", "Tufts", "Yale", "Dartmouth", "Chicago", "Columbia", "Duke", "Georgetown", "Princeton", "U.Penn", "Stanford", "MIT", "Harvard"] fig = go.Figure() fig.add_trace(go.Scatter( x=[72, 67, 73, 80, 76, 79, 84, 78, 86, 93, 94, 90, 92, 96, 94, 112], y=schools, marker=dict(color="crimson", size=12), mode="markers", name="Women", )) fig.add_trace(go.Scatter( x=[92, 94, 100, 107, 112, 114, 114, 118, 119, 124, 131, 137, 141, 151, 152, 165], y=schools, marker=dict(color="gold", size=12), mode="markers", name="Men", )) fig.update_layout( title=dict( text="Gender Earnings Disparity" ), xaxis=dict( title=dict( text="Annual Salary (in thousands)" ) ), yaxis=dict( title=dict( text="School" ) ), ) fig.show() ``` #### Styled Categorical Dot Plot ```python import plotly.graph_objects as go country = ['Switzerland (2011)', 'Chile (2013)', 'Japan (2014)', 'United States (2012)', 'Slovenia (2014)', 'Canada (2011)', 'Poland (2010)', 'Estonia (2015)', 'Luxembourg (2013)', 'Portugal (2011)'] voting_pop = [40, 45.7, 52, 53.6, 54.1, 54.2, 54.5, 54.7, 55.1, 56.6] reg_voters = [49.1, 42, 52.7, 84.3, 51.7, 61.1, 55.3, 64.2, 91.1, 58.9] fig = go.Figure() fig.add_trace(go.Scatter( x=voting_pop, y=country, name='Percent of estimated voting age population', marker=dict( color='rgba(156, 165, 196, 0.95)', line_color='rgba(156, 165, 196, 1.0)', ) )) fig.add_trace(go.Scatter( x=reg_voters, y=country, name='Percent of estimated registered voters', marker=dict( color='rgba(204, 204, 204, 0.95)', line_color='rgba(217, 217, 217, 1.0)' ) )) fig.update_traces(mode='markers', marker=dict(line_width=1, symbol='circle', size=16)) fig.update_layout( title=dict(text="Votes cast for ten lowest voting age population in OECD countries"), xaxis=dict( showgrid=False, showline=True, linecolor='rgb(102, 102, 102)', tickfont_color='rgb(102, 102, 102)', showticklabels=True, dtick=10, ticks='outside', tickcolor='rgb(102, 102, 102)', ), margin=dict(l=140, r=40, b=50, t=80), legend=dict( font_size=10, yanchor='middle', xanchor='right', ), width=800, height=600, paper_bgcolor='white', plot_bgcolor='white', hovermode='closest', ) fig.show() ``` ### Reference See https://plotly.com/python/reference/scatter/ for more information and chart attribute options!