Question

I have a custom function which returns either 0 or 1 depending on two given inputs:

function val = myFunction(val1, val2)

  % logic to determine if val=1 or val=0

end

How can I create a contour plot of the function over the x,y coordinates generated by the following meshgrid?

meshgrid(0:.5:3, 0:.5:3);

This plot will just simply display where the function is 0 or 1 on the contour map.

Was it helpful?

Solution

If your function myFunction is not designed to handle matrix inputs, then you can use the function ARRAYFUN to apply it to all the corresponding entries of x and y:

[x,y] = meshgrid(0:0.5:3);      %# Create a mesh of x and y points
z = arrayfun(@myFunction,x,y);  %# Compute z (same size as x and y)

Then you could use the function CONTOUR to generate a contour plot for the above data. Since your z data only has 2 different values, it would probably make sense for you to only plot one contour level (which would be at a value of 0.5, halfway between your two values). You might also want to instead use the function CONTOURF, which produces color-filled contours that will clearly show where the ones and zeroes are:

contourf(x,y,z,1);  %# Plots 1 contour level, filling the area on either
                    %#   side with different color


NOTE: Since you are plotting data that only has ones and zeroes, plotting contours may not be the best way to visualize it. I would instead use something like the function IMAGESC, like so:

imagesc(x(1,:),y(:,1),z);

Keep in mind the y-axis in this plot will be reversed relative to the plot generated by CONTOURF.

OTHER TIPS

The following will do it:

function bincontour
    clear; clc;

    xrange = 0:.5:3;
    yrange = 1:.5:5;
    [xmesh, ymesh] = meshgrid(xrange, yrange);
    z = arrayfun(@myFunction, xmesh, ymesh);

    contourf(xrange, yrange, z, 5)
end

function val = myFunction(val1, val2)
    val = rand() > 0.5;
end
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top