Scatter plot text behind plotted data when image copied.

4 visualizaciones (últimos 30 días)
Kirstie Beugger
Kirstie Beugger el 2 de Mayo de 2024
Editada: Adam Danz el 11 de Jul. de 2025
I have a figure containing a scatter plot overlaid with a fitted poly. I have added some text labels to the data.
When I copy the image and paste as enhanced metafile, the text appears behind the plotted data, even when I set the text object to 'top' and/or set the current axes to 'top':
t = text(x, y, str); % Adding a text label
uistack(t, 'top'); % Bring the text to the front
set(gca, 'Layer', 'top');
If I change the renderer to 'opengl', the image copies correctly, but the pasted image quality is very poor.
This behaviour is repeatable on any figure of this type.
  2 comentarios
Animesh
Animesh el 2 de Mayo de 2024
Editada: Animesh el 2 de Mayo de 2024
Hey @Kirstie Beugger, can you attach the code as well as the data file (if any) for better understanding of the issue.
Kirstie Beugger
Kirstie Beugger el 2 de Mayo de 2024
Editada: Voss el 2 de Mayo de 2024
Hi Animesh,
Thanks for considering my issue.
This is the original code used to add the text to the plot:
function [t] = addText(x,y,xtxt,ytxt,n)
figure(n)
hold on
legend('AutoUpdate','off')
plot(x,y,"ko")
str = {strcat(xtxt,'%'),ytxt};
t = text(x,y,str);
hold off
end
This is the (simplified) code used to create the figure in the first place:
figure(i)
clf
hold on
%plot the raw data scatter plots
s1 = scatter(data_x,data_y);
s1.MarkerEdgeColor = '#E1E1E1';
%Create a fit object for the data and plot it
[fitresult, ~] = createFit_poly2(data_x,data_y);
plot(fitresult_SandFx(0:max(data_y)), 'k')
%set the correct display for the y axis values
ax = ancestor(s3,'axes');
ax.YAxis.Exponent = 3;
ytickformat('%.0f')
title('Plot Title');
ylabel('y axis label');
xlabel('x axis label');
grid('on');
hold off
saveas(figure(i),strcat('figure ', string(i)))

Iniciar sesión para comentar.

Respuesta aceptada

Adam Danz
Adam Danz el 2 de Mayo de 2024
Editada: Adam Danz el 11 de Jul. de 2025
Thanks for the info @Kirstie Beugger. This bug was fixed in R2025a.
For releases prior to R2025a:
When copying graphics in vector format the figure's renderer is switched to painters which causes the change in text position.
A workaround is to set the z coordinate of the text to a value greater than 0.
tobj = findobj(gca,'type','text');
for i = 1:numel(tobj)
tobj(i).Position(3) = 1;
end
  3 comentarios
Kirstie Beugger
Kirstie Beugger el 6 de Mayo de 2024
Movida: Adam Danz el 6 de Mayo de 2024
Mint, thanks a lot Adam!
For anyone else who needs to use this, Chat changed the code slightly:
tobj = findobj(gca, 'type', 'text');
for i = 1:numel(tobj)
tobj(i).Position(3) = 1;
end
Adam Danz
Adam Danz el 6 de Mayo de 2024
Thanks for correcting that, Kirstie. Forgot the numel(). I fixed my answer.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Annotations en Help Center y File Exchange.

Productos


Versión

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by