Using data cursor with pcolor
If one uses the data cursor on a pcolor plot, you will see three coordinates, X, Y, and Z, but the Z coordinate is always zero. It took me some time to realize that pcolor is simply a variant of the surface function, with the view fixed from above (normal to the xy plane). Inspection of the data associated with the pcolor handle will show that the "Z" values are actually stored in the CData array, and the ZData array is otherwise set to zero. This is a clever arrangement in that plot is fixed at Z = 0, and the Z values are otherwise rendered as scaled colors. The downside is that this arrangement cripples the datacursor (i.e. the Z value is not correctly reported).
One solution is to set ZData = CData (see Figure 2 produced by the code below). The datacursor will now show local Z values. The downside is that pcolor surface is now fully 3D. As a consequence, other plot elements (contours, points, lines) may be masked by this 3D surface. You can see the 3D "pcolor" surface in figure 2 by rotating the plot or by running the command "view(3)" in the command window.
The simpliest "fix" would be to add "C" values to the datacursor. (Perhaps I should suggest this as a new feature.) You will find that if you click on the contour lines, that the datacursor reports back with a variable "Level", so this kind of fix is possible. Or I could write a custom modifcation to the datacursor.
My hope is that someone out there may have found a simplier fix.
Best,
Mark
% Create data
[X,Y] = meshgrid(-2:0.2:2,-2:0.2:2);
Z = X.*exp(-X.^2 – Y.^2);
% Pcolor plot without modification. Datacursor will show Z = 0. Superimposed contours work okay.
figure(1)
hold on
hP = pcolor(X,Y,Z); shading interp;
contour(X,Y,Z, ‘Color’, ‘k’, ‘LineWidth’, 1);
datacursormode on
% PColor plot with modification (ZData = CData), Z value in data cursor works, but contours are locally masked.
figure(2)
hold on
hP = pcolor(X,Y,Z); shading interp;
hP.ZData = hP.CData;
contour(X,Y,Z, ‘Color’, ‘k’, ‘LineWidth’, 1);
datacursormode onIf one uses the data cursor on a pcolor plot, you will see three coordinates, X, Y, and Z, but the Z coordinate is always zero. It took me some time to realize that pcolor is simply a variant of the surface function, with the view fixed from above (normal to the xy plane). Inspection of the data associated with the pcolor handle will show that the "Z" values are actually stored in the CData array, and the ZData array is otherwise set to zero. This is a clever arrangement in that plot is fixed at Z = 0, and the Z values are otherwise rendered as scaled colors. The downside is that this arrangement cripples the datacursor (i.e. the Z value is not correctly reported).
One solution is to set ZData = CData (see Figure 2 produced by the code below). The datacursor will now show local Z values. The downside is that pcolor surface is now fully 3D. As a consequence, other plot elements (contours, points, lines) may be masked by this 3D surface. You can see the 3D "pcolor" surface in figure 2 by rotating the plot or by running the command "view(3)" in the command window.
The simpliest "fix" would be to add "C" values to the datacursor. (Perhaps I should suggest this as a new feature.) You will find that if you click on the contour lines, that the datacursor reports back with a variable "Level", so this kind of fix is possible. Or I could write a custom modifcation to the datacursor.
My hope is that someone out there may have found a simplier fix.
Best,
Mark
% Create data
[X,Y] = meshgrid(-2:0.2:2,-2:0.2:2);
Z = X.*exp(-X.^2 – Y.^2);
% Pcolor plot without modification. Datacursor will show Z = 0. Superimposed contours work okay.
figure(1)
hold on
hP = pcolor(X,Y,Z); shading interp;
contour(X,Y,Z, ‘Color’, ‘k’, ‘LineWidth’, 1);
datacursormode on
% PColor plot with modification (ZData = CData), Z value in data cursor works, but contours are locally masked.
figure(2)
hold on
hP = pcolor(X,Y,Z); shading interp;
hP.ZData = hP.CData;
contour(X,Y,Z, ‘Color’, ‘k’, ‘LineWidth’, 1);
datacursormode on If one uses the data cursor on a pcolor plot, you will see three coordinates, X, Y, and Z, but the Z coordinate is always zero. It took me some time to realize that pcolor is simply a variant of the surface function, with the view fixed from above (normal to the xy plane). Inspection of the data associated with the pcolor handle will show that the "Z" values are actually stored in the CData array, and the ZData array is otherwise set to zero. This is a clever arrangement in that plot is fixed at Z = 0, and the Z values are otherwise rendered as scaled colors. The downside is that this arrangement cripples the datacursor (i.e. the Z value is not correctly reported).
One solution is to set ZData = CData (see Figure 2 produced by the code below). The datacursor will now show local Z values. The downside is that pcolor surface is now fully 3D. As a consequence, other plot elements (contours, points, lines) may be masked by this 3D surface. You can see the 3D "pcolor" surface in figure 2 by rotating the plot or by running the command "view(3)" in the command window.
The simpliest "fix" would be to add "C" values to the datacursor. (Perhaps I should suggest this as a new feature.) You will find that if you click on the contour lines, that the datacursor reports back with a variable "Level", so this kind of fix is possible. Or I could write a custom modifcation to the datacursor.
My hope is that someone out there may have found a simplier fix.
Best,
Mark
% Create data
[X,Y] = meshgrid(-2:0.2:2,-2:0.2:2);
Z = X.*exp(-X.^2 – Y.^2);
% Pcolor plot without modification. Datacursor will show Z = 0. Superimposed contours work okay.
figure(1)
hold on
hP = pcolor(X,Y,Z); shading interp;
contour(X,Y,Z, ‘Color’, ‘k’, ‘LineWidth’, 1);
datacursormode on
% PColor plot with modification (ZData = CData), Z value in data cursor works, but contours are locally masked.
figure(2)
hold on
hP = pcolor(X,Y,Z); shading interp;
hP.ZData = hP.CData;
contour(X,Y,Z, ‘Color’, ‘k’, ‘LineWidth’, 1);
datacursormode on pcolor, datacursor, surface MATLAB Answers — New Questions