How to get the y-axis in the foreground while having the grids in the background?
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Amelie
el 20 de Abr. de 2024
Comentada: Adam Danz
el 23 de Abr. de 2024
Dear all,
this is a version of my code:
figure()
hold on
grid on
set(gca, 'Layer', 'top')
jbfill(1:100,x(:,1)',y(:,1)',color.red, color.red,0,1);
hold off
xticks(0:1:100);
title('Temperature');
ylabel('Percent');
xlabel('Months');
I have the following problem:
I try to get the grids in the background behind jbfill and the yaxis/ yticks above the jbfill, but jbfill is lying above the y-axis / y ticks and thus covering y-axis / y ticks. So in order to get the y-axis / y ticks above jbfill (to make them visible) I use " set (gca, 'Layer','top') " . But then the grids are automatically "above" jbfill although they should be not visible where the jbfill plot is.
Does someone have a hint how I can solve this problem?
Many thanks for your help!
Respuesta aceptada
Voss
el 20 de Abr. de 2024
"I try to get the grids in the background behind jbfill and the yaxis/ yticks above the jbfill"
That's no going to work; the grids and ticks must "go together" - eitther all behind other stuff in the axes (if Layer is 'bottom') or all in front of other stuff in the axes (if Layer is 'top').
However, you can create your own lines that represent grid lines and place those behind of or in front of whatever you want.
Example:
x = 0:50;
y = rand(1,numel(x));
figure()
hold on
grid off
box on
set(gca, 'Layer', 'top')
% vertical grid line coordinates:
vxd = x([1 1],1:5:end);
vxd(end+1,:) = NaN;
vyd = repmat([0;1;NaN],1,size(vxd,2));
% horizontal grid line coordinates:
hxd = repmat([x([1 end]).'; NaN],1,11);
hyd = repmat(linspace(0,1,11),2,1);
hyd(end+1,:) = NaN;
% create the grid lines (before creating the patch):
line(vxd(:),vyd(:),'Color',0.15*[1 1 1],'LineStyle','--')
line(hxd(:),hyd(:),'Color',0.15*[1 1 1],'LineStyle','--')
% create a patch (on top of the grid lines):
patch(x([1 1:end end]),[0 y 0],'r')
3 comentarios
Adam Danz
el 23 de Abr. de 2024
Starting in R2024a you can control the stack order of ConstantLine objects. The benefits of using a ConstantLine rather than a line() is that ConstantLines are 1-dimensional, you won't see the end of the line if the axes limits change, and the code is simpler.
x = 0:50;
y = rand(1,numel(x));
figure()
hold on
grid off
box on
set(gca, 'Layer', 'top')
% create the grid lines (before or after the patch)
xlines = x(1:5:end);
ylines = 0:.1:1;
xline(xlines, '--', 'Color', 0.15*[1 1 1], 'Layer','bottom')
yline(ylines, '--', 'Color', 0.15*[1 1 1], 'Layer','bottom')
% create a patch (on top of the grid lines):
patch(x([1 1:end end]),[0 y 0],'r')
- xline|yline released in R2018b
- array support in xline|yline: R2021a
- Layer property added R2024a
- Note that xline|yline have a default alpha value of 0.7 which can be changed using the Alpha property.
Más respuestas (0)
Ver también
Categorías
Más información sobre Polygons en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!