MATLAB: How to overlay a scatter plot over an image (png,jpg) with correct marker colors

'scatter plot on image'

I am unable to overlay a scatter plot over a png/jpg format image for correct marker colors. The color of all the markers remain the same somehow. I am doing following.
figure;
imshow('image');
hold on;
scatter(x,y,size,color,'filled');
%color is an array of the same size as x and y and represent the power in this case
hold off;
The result without the image is as follows
The result including the image and incorrect marker color is as follows.
I would greatly appreciate for assistance in this matter. The available solutions in the other answer threads doesn't work in my case unfortunately.

Best Answer

Your "color" array is a vector of values the same length as x and y. That indicates that the actual color is to be interpolated according to caxis and the active color map. caxis by default scales according to all of the data in the axes. When you have the image in the axes as well as the scatter plot, you are potentially changing the range of data in the axes.
If you are happy with the colors at present, then I suggest that you get the File Exchange contribution "freezeColors" and then use
ax = gca();
scatter(ax, x,y,size,color,'filled');
freezeColors(ax);
hold(ax, 'on');
imh = imshow(ax, 'image');
hold(ax, 'off')
uistack(imh, 'bottom')
Note:
If you look carefully at your combined graph that you posted, you will see that your scatter plot is upside down. This is because image() and imagesc() and imshow() helpfully set "axis image" for you, one of the effects of which is to set the axis Ydir property to 'reverse' so that the first row of the image goes into the top of the display and the rows increase downwards -- as opposed to the normal X Y system where the Y increases upwards.
One of the side effects of the order that I show here is that with the "hold on" done before the imshow() command, the YDir property will be held, so that the scatter plot will not be flipped upside down. But that means that the image will be flipped relative to what you would have seen before. You need to decide which coordinate system you want; if you want the image the "usual" way and the scatter plot upside down, then
set(ax, 'YDir', 'reverse')
before the first "hold" call.
When you are combining image and data, it is common to need to read the image into an array with imread() and then to flipud() the array before using imshow() on it, and to not use YDir reverse