Copy figure - bad quality

Asked by Mario Rossi on 22 Mar 2012
Latest activity Answered by Albert Yam on 27 Jul 2012

Hi all,

I have some problem with the quality of copied figure. If I plot something and then I chose edit-copy figure, no problems, I can paste them in word and the quality is good. BUT if I do some modifications on the figure, for example I add some text or shapes, then if I do copy figure, the quality of the pasted image in word is lower.. For example it's impossible to read well the axis label.. You have any idea of the solution for this problem?

Thank you

0 Comments

Mario Rossi

Products

No products are associated with this question.

8 Answers

Answer by Malcolm Lidierth on 22 Mar 2012

1 Comment

Image Analyst on 22 Mar 2012

Someone else just asked about saving and I referred him to the FAQ: http://matlab.wikia.com/wiki/FAQ#How_do_I_save_my_figure.2C_axes.2C_or_image.3F_I.27m_having_trouble_with_the_built_in_MATLAB_functions. (Make sure the final dot is included in the URL). The FAQ also which mentions export_fig(), which is the consistently the most downloaded File Exchange submission. I guess that's why questions on saving figures are the MOST commonly asked question - we get 1 to 3 a day or so.

Malcolm Lidierth
Answer by Richard on 22 Mar 2012

try saving the figure from matlab as a .jpg file by typing

        ff =(C:\My Documents);
        fnout = [ff, '\FigureName', num2str(1,'%.2d'), '.jpg'];
        print('-djpeg','-r150',fnout);

This will then save the figure in my documents. Then in word go to inser--> picture.

If you want really high quality figures, you should save your figures as .eps files, but I dont think that word accepts these.

1 Comment

Richard on 23 Mar 2012

Try using:

http://www.mathworks.com/matlabcentral/fileexchange/23629

Richard
Answer by Mario Rossi on 22 Mar 2012

Thank you for the answers.

@lestyn: I can manually export in jpg, but the situation is the same, even worse maybe..

@Malcom: yes, I've already tried export_fig, but nothing changes.

The key point is that I don't understand why the copied figure changes between the situation "figure without any change", and the "figure after that I add some shapes"... It should be the same!

1 Comment

Oliver Woodford on 25 Mar 2012

An example script would help a lot.

Mario Rossi
Answer by Malcolm Lidierth on 22 Mar 2012

This will not improve the image like export_fig but it does reproduce what's on screen -so if if you do not see grotty graphics on screen this may help.

It calls

this=MUtil.getFigureHWLWContainer(fh); 

which is defined in Project Waterloo http://sourceforge.net/projects/waterloo/, and returns a reference to the MATLAB heavyweight/lightweight container but you could get that in other ways e.g. with Yair Altman's findjobj.

Dependent jars are part of the standard MATLAB distribution and are on the static javaclasspath.

MATLAB seem to build graphics in an offscreen buffer then paste a bitmap into the Java AWT Canvas. Here, that is replaced with an Apache Batik SVGCanvas. The MALAB graphics will be embedded as a bitmap in the file.

function SaveAsSVG(fh, str)
% SaveAsSVG saves a MATLAB figure to an SVG file
% Example:
%     SaveAsSVG(figurehandle, filename)
% where filename is the fully qualified name of the file to write.
%----------------------------------------------------------------------
% Part of Project Waterloo and the sigTOOL Project at King's College
% London.
% Author: Malcolm Lidierth 03/11
% Copyright © The Author & King's College London 2011-
% Email: sigtool (at) kcl.ac.uk
% ---------------------------------------------------------------------
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.batik.dom.GenericDOMImplementation;
import org.apache.batik.svggen.SVGGeneratorContext;
import org.apache.batik.svggen.SVGGraphics2D;
import org.apache.batik.svggen.SVGGraphics2DIOException;
import org.w3c.dom.DOMImplementation;
this=MUtil.getFigureHWLWContainer(fh);
if nargin<2 || isempty(str)
    str='untitled.svg';
end
[folder filename ext]=fileparts(str);
if isempty(ext);ext='.svg';end
if isempty(folder);folder=pwd();end
str=[fullfile(folder, filename), ext];
thisFile = File(str);
OutputStream = [];
try
    OutputStream =FileOutputStream(thisFile);
catch ex
end
domImpl = GenericDOMImplementation.getDOMImplementation();
svgNS = 'http://www.w3.org/2000/svg';
document = domImpl.createDocument(svgNS, 'svg', []);
svgGenerator = SVGGraphics2D(document);
svgGenerator.scale(1,1);
this.paint(svgGenerator);
try
    out = OutputStreamWriter(OutputStream, 'UTF-8');
catch ex
end
try
    svgGenerator.stream(out, true);
catch ex
end
end

0 Comments

Malcolm Lidierth
Answer by Mario Rossi on 26 Mar 2012

if I have to use this long method, so it's much faster to copy and paste in paint or some kind of image editing program... Thank you anyway!

0 Comments

Mario Rossi
Answer by hudin ako dian tariche on 9 May 2012

reproduce your picture.

0 Comments

hudin ako dian tariche
Answer by John Petersen on 27 Jul 2012

Save it as a .emf or .png file. These retain image quality for graphs and plots with lines.

0 Comments

John Petersen
Answer by Albert Yam on 27 Jul 2012

This might just be copy/paste but, try

print -s -dmeta

0 Comments

Albert Yam

Contact us