I found this function super useful in my dissertation and more generally in my work. What it does is take
y coordinates and a set of strings and annotates a scatterplot using those labels. For example, here’s a figure from my dissertation where I use it to annotate a plot of regression leverage by year. I jitter the points a little to provide legibility to the text labels, but basically it’s just a call like
annoscatter(df.year, df.leverage, df.district_id).
Not sure if there’s a more elegant solution to this using matplotlib, but I really like how it looks, especially since there’s also passthrough keyword dictionaries implemented like seaborn. Not sure if @mwaskom would take a PR for something as simple as this, though.
import matplotlib.pyplot as plt def annoscatter(x,y, text, marker='.', markersize=1, ax = None, fig = None, color='k', fig_kw = dict(), scatter_kw = dict(), ann_kw=dict()): if ax is None: if fig is None: fig = plt.figure(**fig_kw) ax = plt.gca() if not (marker is '' or markersize == 0): scatter_kw['marker'] = marker scatter_kw['s'] = markersize ax.scatter(x,y, **scatter_kw) else: scatter_kw['alpha'] = 0 ax.scatter(x,y,**scatter_kw) if isinstance(color, str): colors = [color]*len(x) else: colors = list(color) for xi,yi,string,c in zip(x,y,text,colors): ax.annotate(s=string, xy=(xi,yi), color=c, **ann_kw) return ax