Exporting EPS Files from MATLAB with CMYK Colors

Most graphics exported from MATLAB, as said in a previous post, are of publishable quality, but some graphics require further editing to add more graphics elements. Unfortunately, EPS files with a CMYK model exported from MATLAB use a US color profile, not a ISO color profile. Import these files into Adobe Illustrator with a ISO set of color profiles, the colors are not displayed correctly. The following blog post explains the problem and provides a possible solution.

In 2014 MathWorks changed the default colormap of MATLAB from jet to parula. Steve Eddin’s blog about colormaps provides the history of the new colormap including the origin of the name. If you are interested in the history of the colors of MATLAB and the origin of the colormaps, you should have a look at the blog post of the MATLAB inventor and company founder Steve Molar, “The Origin of Colormaps“. The post also lists a number of valuable functions to display colormaps.

And yes, the 4th edition of the MRES book looks more beautiful with the new colors! Unfortunately, the print function with the -cmyk option does allow us to change the color standard from US to Europe. As an example let us create synthetic data using rand, display the data as a line plot and save the graphics as EPS files with CMYK and RGB colors.

clear, clc, close all
rng(0), data = rand(10,10);

We can then display the data as a line plot and save the graphics as EPS file with CMYK and RGB colors.

figure1 = figure('Position',[50 800 400 250]);
axes1 = axes('LineWidth',1.5,...
    'FontSize',14,...
    'Box','On'); hold on
line1 = line(1:10,data,...
    'LineWidth',2);
 
print -depsc2 -painters -cmyk figure1a_cmyk.eps
print -depsc2 -painters figure1a_rgb.eps

When we export the graphics using RGB colors, they are rendered correctly (left), while the colors using CMYK colors look differently (right). Similarly we can display the data as a surface plot and export as EPS files again.

figure2 = figure('Position',[50 450 400 250]);
axes2 = axes('Visible','Off',...
    'View',[-20 70]); hold on
surf2 = surf(data);

print -depsc2 -painters -cmyk figure2a_cmyk.eps
print -depsc2 -painters figure2a_rgb.eps

Again, when we export the graphics using RGB colors, they are rendered correctly (left), while the colors using CMYK colors look differently (right). Importing the files into Adobe Illustrator, as an example, applies the ISO color norm and the colors look different from what we expect from the original graphics in MATLAB. We can get the RGB and CMYK values in MATLAB using

for i = 1 : 7
    lcolor(i,:) = get(line1(i),'Color');
end
cm_lines_rgb_0_1 = lcolor
cm_lines_rbg_0_255 = uint8(255*lcolor)
cm_lines_cmyk_0_255 = uint8(100*rgb2cmyk(lcolor))

which yields

cm_lines_rgb_0_1 =
      0   0.4470   0.7410
 0.8500   0.3250   0.0980
 0.9290   0.6940   0.1250
 0.4940   0.1840   0.5560
 0.4660   0.6740   0.1880
 0.3010   0.7450   0.9330
 0.6350   0.0780   0.1840

cm_lines_rbg_0_255 =
      0      114      189
    217       83       25
    237      177       32
    126       47      142
    119      172       48
     77      190      238
    162       20       47

cm_lines_cmyk_0_255 =
     74       29        0       26
      0       53       75       15
      0       24       80        7
      6       37        0       44
     21        0       49       33
     63       19        0        7
      0       56       45       37

Many steps are required to convert RGB to CMYK, as described by Steve Eddins in another blog post. The code above uses the function rgb2cmyk by C. Begler. Importing the same graphics with RGB colors, and then converting it into CMYK while importing it into Adobe Illustrator, I get the colors

     85       51        0        0
      9       78       98        1
      7       33       91        0
     62       92        0        0
     61        7       95        0
     63        5        0        0
     25       99       78       20

which seems to be the CMYK colors in ISO norm. The workaround is to export the EPS files as RGB files and then convert them to CMYK when importing the files into a vector graphics program like Adobe Illustrator. Perhaps a future version of MATLAB will allow us to export EPS files with CMYK color models using a ISO color profile in addition to a US color profile.