Effacer les filtres
Effacer les filtres

Scatter plot text behind plotted data when image copied.

2 vues (au cours des 30 derniers jours)
Kirstie Beugger
Kirstie Beugger le 2 Mai 2024
Commenté : Adam Danz le 6 Mai 2024
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 commentaires
Animesh
Animesh le 2 Mai 2024
Modifié(e) : Animesh le 2 Mai 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 le 2 Mai 2024
Modifié(e) : Voss le 2 Mai 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)))

Connectez-vous pour commenter.

Réponse acceptée

Adam Danz
Adam Danz le 2 Mai 2024
Modifié(e) : Adam Danz le 6 Mai 2024
Thanks for the info @Kirstie Beugger. Looks like a bug.
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 commentaires
Kirstie Beugger
Kirstie Beugger le 6 Mai 2024
Déplacé(e) : Adam Danz le 6 Mai 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 le 6 Mai 2024
Thanks for correcting that, Kirstie. Forgot the numel(). I fixed my answer.

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by