data = {{1, 1}, {4, 4}};
labels = {"A","B"};
images = Rasterize[ExampleData[{"TestImage", #}],
RasterSize -> 200, ImageSize -> 30]&/@ {"Lena","Apples"};
Using images
as plot markers (as in Rohit's answer) is the most straightforward approach. Here are a few additional ways:
ListPlot with nested Callouts:
You can use the image as one of multiple call-outs for each data point:
data2 = MapThread[Callout[Callout[#, #3, Automatic, 1,
LeaderSize -> {{40, 45 Degree, 20}, 20}, Appearance -> "Leader"], #2, Center] &,
{data, images, labels}];
ListPlot[data2, Frame -> True, Axes -> False, PlotRangePadding -> 2]

ListPlot + Callout + Labeled:
You can use Labeled
to inject the image as a label:
data3 = MapThread[{Callout[Labeled[#, #2, Center], #3, Automatic, 1,
LeaderSize -> {{40, 45 Degree, 20}, 20}, Appearance -> "Leader"]} &,
{data, images, labels}];
ListPlot[data3, Frame -> True, Axes -> False, PlotRangePadding -> 2]

BubbleChart + ChartElements:
BubbleChart[Append[#, 1]& /@ data,
ChartElements -> images,
ChartLabels -> Callout[labels, Above],
PlotRangePadding -> 1]

PlotMarkers
like you normally would. There are examples in the documentation forPlotMarkers
where they use images. $\endgroup$