Gapless 2d color plot

3 views (last 30 days)
Niklas
Niklas on 21 Mar 2020
Edited: Niklas on 21 Mar 2020
Hello everyone,
I want to plot the following data:
X,Y and Z, where X and Y are a vector of equal length/size and Z is a matrix with the dimension of X*Y. Z shall be displayed as a color. I know I can use imagesc()and pcolor() to plot. However, I have the following problem.
imagesc() does not place the pixels as I want them. The range for the x-values goes from 0.0 to 0.5. The X axis is binned/divided into 50 parts, means it goes from 0.0 to 0.001, 0.002 and so on. The first pixel is not located perfectly from 0.0 to 0.001.
The problem with pcolor() would be, that the x and y values are always 1,2,3,4,5 and so on. It is not possible to red X,Y,Z in, at least not for me. If I would be able to place the pixels as perfect as in pcolor() that would be actually my solution.
In the following you see the result for the imagesc(). From 0.0 to 0.05 there should be exactly 5 pixels, and the edge of the last one should exactly end at the tick marker of 0.05. It is not like that, however. I have used the search function a lot, I was not able to find proper solutions of how I could define the center and/or width of the pixels. And why does imagesc() display the last value in x direction twice??? I mean, for y and y axis the last value/pixel is much bigger than the others, why??? The problem is not how to plot my data, but rather how to plot them in an appropriate and "clean" way. I would be very helpful if someone can give me an answer finally! Thanks in advance to all of you!

Answers (1)

Steven Lord
Steven Lord on 21 Mar 2020
The problem with pcolor() would be, that the x and y values are always 1,2,3,4,5 and so on.
That's because you called pcolor with one input. If you call it with three inputs, according to the documentation "pcolor(X,Y,C) specifies the x- and y-coordinates for the vertices. The size of C must match the size of the x-y coordinate grid. For example, if X and Y define an m-by-n grid, then C must be an m-by-n matrix."
Alternately the heatmap or histogram2 functions may be of use to you. histogram2 has a syntax where you specify the XBinEdges, YBinEdges, and BinCounts rather than the raw data to be binned.
  1 Comment
Niklas
Niklas on 21 Mar 2020
Edited: Niklas on 21 Mar 2020
Very helpful answer, thanks man! But when I use pcolor(X,Y,Z) an empty figure opens...
I will check now histogram2 and heatmap.
Edit: The matrix dimensions did not agree. Now pcolor() works. I think I need to vary some settings but this should be my solution I guess.
But why does pcolor() make 49x49 bins instead of 50x50. I counted it, its no longer 50x50.
How can I delete the grindlines (I know how to in general) without deleting the x- and y-axis lines???
Thanks.

Sign in to comment.

Categories

Find more on Data Distribution Plots in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!