Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom Markers for Matlab plot

I have searched google and everyone says its not supported. I was wondering if there are any open community matlab functions which would be able to plot a user defined png as a marker. The closest I found was http://de.mathworks.com/matlabcentral/fileexchange/39487-custom-marker-plot/content/plotCustMark/plotCustMark.m . But it doesn't serve the intended purpose . Let me know if its even possible for me to write something up for this ! Thanks.

Additional Problem : Okay I have this weird problem now . my png has a black background !! I dont understand why. I tried to lower the alpha value still doesn't work.

Solution : The problems I mentioned in the comments to @brainkz can be solved by

http://de.mathworks.com/matlabcentral/answers/144411-displaying-image-over-background-making-top-image-background-color-transparent

Method : Import the transparency settings of your image through

[marker,map,transperancy ] = imread('car.png');

and later set

handleIm = imagesc([x_low x_high], [y_low y_high], marker)
set(handleIm ,'AlphaData',transperancy);

Clarification : The images were all transperant but since I was overlaying it over another image it turned the current images background to default black. I posted a solution to this problem which I guess would be really useful to a lot of people.

like image 836
Sayantan Roy Avatar asked Aug 04 '16 08:08

Sayantan Roy


People also ask

How do you add a marker to a plot in MATLAB?

Add markers in one of these ways: Include a marker symbol in the line-specification input argument, such as plot(x,y,'-s') . Specify the Marker property as a name-value pair, such as plot(x,y,'Marker','s') .

What are markers in MATLAB?

Markers. Specify Combinations of Colors, Line Styles, and Markers. Modify Line Width, Marker Fill, and Marker Outline. See Also. Related Topics.

How do you plot multiple lines on the same graph in MATLAB?

Plot Multiple Lines By default, MATLAB clears the figure before each plotting command. Use the figure command to open a new figure window. You can plot multiple lines using the hold on command. Until you use hold off or close the window, all plots appear in the current figure window.


1 Answers

imagesc can put the png on you plot. We can avail ourselves of this in the following way:

Define user data:

x = 1:10;
y = 5*rand(size(x)) + 2.5;

Load the marker image:

marker = imread('icon.png');

Define marker size and adjust the x and y data:

markersize = [1,1]; %//The size of marker is expressed in axis units, NOT in pixels
x_low = x - markersize(1)/2; %//Left edge of marker
x_high = x + markersize(1)/2;%//Right edge of marker
y_low = y - markersize(2)/2; %//Bottom edge of marker
y_high = y + markersize(2)/2;%//Top edge of marker

Then, we put our loaded image on the plot at the specified points

for k = 1:length(x)
    imagesc([x_low(k) x_high(k)], [y_low(k) y_high(k)], marker)
    hold on
end
axis equal
hold off

At the end, you are likely to get the following:

enter image description here

To achieve the desired appearance, you would need to play with the parameters for a while.

Hope that helps

like image 94
brainkz Avatar answered Sep 29 '22 13:09

brainkz