Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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')
like image 647
gdlm Avatar asked Jun 17 '26 22:06

gdlm


1 Answers

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

like image 84
Dawny33 Avatar answered Jun 19 '26 12:06

Dawny33