Basic Connected Scatterplot with Matplotlib

logo of a chart:ScatterConnected

This post explains how to produce a basic connected scatterplot using matplotlib and provides a reproducible code.

Introduction

Connected scatterplots are just a mix between scatterplots and linecharts. It can be made using the plot() function of matplotlib with the possible parameters:

  • x: The horizontal coordinates of the data points.
  • y: The vertical coordinates of the data points.
  • linestyle: Line style, also abbreviated as ls. A list of available styles and how to customize them can be found here. Some of the most popular are "-" for a solid line, "--" for a dashed line, and ":" for a dotted line.
  • marker: Marker style. A complete list of available markers can be found here. Some of the most popular are "o" for a circle, "." for a point, "^" for a triangle, etc.

If you want to customize them, just check the scatter and line sections of the website!

Libraries & Data

# Libraries
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# Set figure default figure size
plt.rcParams["figure.figsize"] = (10, 6)
# Create a random number generator for reproducibility
rng = np.random.default_rng(1111)

# Get some random points!
x = np.array(range(10))
y = rng.integers(10, 100, 10)
z = y + rng.integers(5, 20, 10)

By default, plt.plot() generates a solid line plot. This function can also be used to obtain both a scatterplot and a lineplot at once by passing both the linestyle and the marker type.

Default grouped connected scatterplot

plt.plot(x, z, linestyle="-", marker="o", label="Income")
plt.plot(x, y, linestyle="-", marker="o", label="Expenses")
plt.legend()
plt.show()

Notice the legend generated automatically combines both lines and markers. This legend also reflects any customization we may apply.

Customize lines and markers

plt.plot(
    x, z, ls="--", lw=3, 
    marker="X", markersize=10, markerfacecolor="red", markeredgecolor="black",
    label="Income"
)
plt.plot(
    x, y, ls=":", 
    marker="o", markersize=15, markerfacecolor="None", 
    label="Expenses"
)
plt.legend()
plt.show()

Legend tweaks

If you want to have only either the line or the dot in the legend you can combine plt.scatter() and plt.plot() giving the label to the one you want to include in the legend. For example:

plt.scatter(x, z, label="Income")
plt.plot(x, z, ls="--")

plt.scatter(x, y, label="Expenses")
plt.plot(x, y, ls="--")

plt.legend()
plt.show()

Constructing the connected scatterplot component by component also gives us more flexibility to customize our plot. For example, it is possible to use different colors for the markers by passing a list of colors to the color argument in plt.scatter().

More customization

plt.plot(x, z)
plt.scatter(x, z, color=["red", "black"] * 5, s=80, zorder=10)
plt.show()

We would have obtained an error if we had passed color=["red", "black"] * 5 to the plt.plot() function.

Contact & Edit


👋 This document is a work by Yan Holtz. You can contribute on github, send me a feedback on twitter or subscribe to the newsletter to know when new examples are published! 🔥

This page is just a jupyter notebook, you can edit it here. Please help me making this website better 🙏!