gdlm
gdlm

Reputation: 353

Plotting img with matplotlib

I have some points I'd like to plot for a presentation, but, instead of plotting the characteristic ball-points, is there any way to plot a png image, something like

plt.scatter(X,Y, img='figure.png')

Upvotes: 3

Views: 636

Answers (1)

Dawny33
Dawny33

Reputation: 11061

The AnnotationBox module in matplotlib helps in plotting images instead of points in the visualizations

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
from matplotlib.cbook import get_sample_data

def main():
    x = np.linspace(0, 10, 20)
    y = np.cos(x)
    image_path = get_sample_data('pic.png')
    fig, ax = plt.subplots()
    imscatter(x, y, image_path, zoom=0.1, ax=ax)
    ax.plot(x, y)
    plt.show()

def imscatter(x, y, image, ax=None, zoom=1):
    if ax is None:
        ax = plt.gca()
    try:
        image = plt.imread(image)
    except TypeError:
        pass
    im = OffsetImage(image, zoom=zoom)
    x, y = np.atleast_1d(x, y)
    artists = []
    for x0, y0 in zip(x, y):
        ab = AnnotationBbox(im, (x0, y0), xycoords='data', frameon=False)
        artists.append(ax.add_artist(ab))
    ax.update_datalim(np.column_stack([x, y]))
    ax.autoscale()
    return artists

main()

The resulting image:

enter image description here

Upvotes: 4

Related Questions