主要内容

exportgraphics

R2026b

导出图窗或图

描述

exportgraphics(obj,filename) 将 obj 指定的图形对象的内容导出到文件中。图形对象可以是任何类型的坐标区、图窗、独立可视化、分块图布局或图窗内的容器。生成的图形经过紧密裁剪,内容周围只留很窄的边距。通常,内容是具有装饰(如标题、注解、图例和颜色栏)的绘图。不捕获 UI 组件。

示例

exportgraphics(obj,filename,Name=Value) 指定保存文件的其他选项。例如,exportgraphics(gca,"myplot.jpg",Resolution=300) 将当前坐标区的内容保存为 300-DPI 图像文件。

示例

示例

全部折叠

创建一个线图并获取当前坐标区。然后将坐标区的内容保存为 JPEG 文件。

plot(rand(5,5))
ax = gca;
exportgraphics(ax,"LinePlot.jpg")

Figure contains an axes object. The axes object contains 5 objects of type line.

显示一个图像并获取当前坐标区。然后将坐标区的内容保存为 300-DPI JPEG 文件。

I = imread("peppers.png");
imshow(I)
ax = gca;
exportgraphics(ax,"Peppers300.jpg",Resolution=300)

Figure contains an axes object. The hidden axes object contains an object of type image.

自 R2025a 起

要指定导出文件的宽度和高度,请创建一个具有相似大小和纵横比的图窗。例如,在大小为 500×400 像素的图窗中创建一个针状图。然后将该图窗导出为 500×400 像素的 PNG 文件,包含在每条边上填充的 10 个像素。

f = figure;
f.Position(3:4) = [500 400];
stem(1:10,"filled",LineWidth=2)
ylim padded
exportgraphics(f,"stemplot.png",Units="pixels", ...
     Width=500,Height=400,Padding=10)

Stem plot

显示一个具有超出坐标区边界的注解的绘图。将图窗的内容保存为 PDF 文件。

plot(1:10)
annotation("textarrow",[0.06 0.5],[0.73 0.5],String="y = x")
f = gcf;
exportgraphics(f,"AnnotatedPlot.pdf")

Figure contains an axes object. The axes object contains an object of type line.

显示一个条形图并获取当前坐标区。然后将坐标区的内容保存为仅包含矢量图的 PDF。

bar([10 22 31 43])
ax = gca;
exportgraphics(ax,"BarChart.pdf",ContentType="vector")

Figure contains an axes object. The axes object contains an object of type bar.

要创建多页 PDF,请将 Append 名称-值参量设置为 true。

例如,创建一个线图并将坐标区的内容保存到文件 myplots.pdf 中。

plot([0 0.3 0.1 0.6 0.4 1])
ax = gca;
exportgraphics(ax,"myplots.pdf")

Figure contains an axes object. The axes object contains an object of type line.

接下来,创建一个条形图,并将坐标区的内容保存为 myplots.pdf 中的第二页。

bar(1:10)
exportgraphics(ax,"myplots.pdf",Append=true)

Figure contains an axes object. The axes object contains an object of type bar.

绘制一条带一个标记的抛物线。在 for 循环的每次迭代中更改该标记的位置,并将这些更改捕获为动画 GIF 中的帧。

x = -10:0.5:10;
y = x.^2;
p = plot(x,y,"-o",MarkerFaceColor="red");
for i=1:41
    p.MarkerIndices = i;
    exportgraphics(gca,"parabola.gif",Append=true)
end

Figure contains an axes object. The axes object contains an object of type line.

在分块图布局中显示两个绘图。然后通过将 TiledChartLayout 对象传递给 exportgraphics 函数,将这两个图保存为一个 PDF。

t = tiledlayout(2,1);
nexttile
plot([1 2 3])
nexttile
plot([3 2 1])
exportgraphics(t,"Layout.pdf")

Figure contains 2 axes objects. Axes object 1 contains an object of type line. Axes object 2 contains an object of type line.

如果您只想保存布局中的一个图,请在调用 nexttile 函数时包含坐标区返回参量。然后将坐标区传递给 exportgraphics 函数。

显示一个热图。然后将该图保存为只包含具有透明背景的矢量图的 PDF。

h = heatmap(rand(10,10));
exportgraphics(h,"Hmap.pdf",BackgroundColor="none",ContentType="vector")

Figure contains an object of type heatmap.

创建一个名为 saveapp.m 的程序文件,它显示一个绘图和一个用于保存坐标区内容的按钮。在该按钮的回调函数中,调用 uiputfile 函数来提示用户输入文件名和位置。然后调用 exportgraphics 函数并在其中包含指定文件的完整路径。

function saveapp
f = uifigure;
ax = uiaxes(f,Position=[25 25 400 375]);
plot(ax,[0 0.3 0.1 0.6 0.4 1])
b = uibutton(f,Position=[435 200 90 30],Text="Save Plot");
b.ButtonPushedFcn = @buttoncallback;

    function buttoncallback(~,~)
        filter = {"*.jpg";"*.png";"*.tif";"*.pdf";"*.eps"};
        [filename,filepath] = uiputfile(filter);
        if ischar(filename)
            exportgraphics(ax,[filepath filename]);
        end
    end
end

通过调用 saveapp 函数来运行该 App。当您点击 App 中的 Save Plot 按钮时,会出现一个对话框,提示您输入文件名和位置。然后,坐标区的内容将保存到指定的文件中。坐标区周围的区域(包括按钮)不包括在该文件中。

saveapp

App containing a plot and a button labeled "Save Plot"

输入参数

全部折叠

图形对象,指定为以下对象之一:

  • 任何类型的坐标区:Axes、PolarAxes 或 GeographicAxes 对象。

  • 使用 figure 或 uifigure 函数创建的图窗。

  • 独立可视化,如 heatmap 图。

  • 使用 tiledlayout 函数创建的分块图布局。

  • 图窗中的容器:Panel 或 Tab。

注意

  • exportgraphics 不捕获 UI 组件,如按钮或滑块。

  • 如果指定的容器包含子容器,MATLAB® 在某些情况下会生成错误。有关详细信息,请参阅不支持相邻的容器。 (自 R2025a 起)

文件名,指定为包含文件扩展名的字符向量或字符串标量。如果 filename 不包含完整路径,MATLAB 会将文件保存在当前文件夹中。您必须具有文件的写入权限。

下表列出了支持的文件格式和文件扩展名(不区分大小写)。

文件格式文件扩展名

联合图像专家组 (JPEG)

"jpg" 或 "jpeg"

可移植网络图形 (PNG)

"png"

标记图像文件格式 (TIFF)

"tif" 或 "tiff"

图形交换格式 (GIF)

"gif"

可缩放矢量图 (SVG) (自 R2025a 起)

"svg"

可移植文档格式 (PDF)

当 ContentType 设置为 "vector" 时,该 PDF 包含可嵌入字体。

"pdf"

仅适用于 Windows® 系统的增强型图元文件 (EMF)

"emf"

封装的 PostScript® (EPS)

"eps"

包含交互式 Web 画布的 HTML 文件 (自 R2026a 起)

有关交互式 Web 画布的详细信息,请参阅Display Interactive Graphics on Webpages。

"html"

示例: exportgraphics(gca,"myfile.jpg") 将当前坐标区的内容保存到名为 myfile.jpg 的 JPEG 文件。

名称-值参数

全部折叠

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

示例: exportgraphics(gca,"myplot.jpg",Resolution=300) 将当前坐标区的内容保存为 300-DPI 图像文件。

保存为 EMF、EPS 或 PDF 文件时要存储的内容的类型。将该值指定为以下选项之一:

  • "auto" - MATLAB 控制内容是矢量图还是图像。

  • "vector" - 将内容存储为可缩放到任何大小的矢量图。如果您保存的是 PDF 文件,则可嵌入字体会包括在该文件中。

  • "image" - 将内容存储到该文件内的一个或多个图像中。

注意

  • JPEG、TIFF、PNG、GIF 和 HTML 文件不支持 "vector" 选项。

  • 如果指定 "vector" 选项,某些可视化效果可能会包含杂散线条或其他伪影。

分辨率,单位为每英寸点数 (DPI),指定为大于或等于 1 的整数。

当您导出 HTML 文件或当 ContentType 为 "vector" 时,指定分辨率不起作用。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

背景颜色,指定为 "current"、"none"、RGB 三元组、十六进制颜色代码或颜色名称。背景颜色控制坐标区或图周围边距的颜色。

  • 值 "current" 根据父容器的颜色设置背景颜色。如果通过设置属性显式设置父容器的颜色(例如使用 figure(Color="red") 创建红色图窗),则导出的文件将使用该颜色。

    如果未设置父容器的颜色,则导出的文件的背景颜色取决于主题。浅色主题下背景为白色。深色主题下背景为深灰(接近黑色)。 (自 R2025a 起)

  • "none" 值根据 ContentType 的值将背景颜色设置为透明、白色或深灰(接近黑色):

    • 如果 ContentType="vector",背景颜色为透明。

    • 如果 ContentType="image",浅色主题的图窗的背景颜色为白色,深色主题的图窗的背景颜色为深灰色(近乎黑色)。

    • 如果 ContentType="auto",MATLAB 根据它用于确定要导出的内容类型的启发式方法设置背景颜色。

  • 或者,指定自定义颜色或指定的颜色。

自定义颜色和指定的颜色

RGB 三元组和十六进制颜色代码对于指定自定义颜色非常有用。

  • RGB 三元组是包含三个元素的行向量,其元素分别指定颜色中红、绿、蓝分量的强度。强度值必须位于 [0,1] 范围内,例如 [0.4 0.6 0.7]。

  • 十六进制颜色代码是字符向量或字符串标量,以井号 (#) 开头,后跟三个或六个十六进制数字,范围可以是 0 到 F。这些值不区分大小写。因此,颜色代码 "#FF8800" 与 "#ff8800"、"#F80" 与 "#f80" 是等效的。

此外,还可以按名称指定一些常见的颜色。下表列出了命名颜色选项、等效 RGB 三元组和十六进制颜色代码。

颜色名称短名称RGB 三元组十六进制颜色代码外观
"red""r"[1 0 0]"#FF0000"

Sample of the color red

"green""g"[0 1 0]"#00FF00"

Sample of the color green

"blue""b"[0 0 1]"#0000FF"

Sample of the color blue

"cyan" "c"[0 1 1]"#00FFFF"

Sample of the color cyan

"magenta""m"[1 0 1]"#FF00FF"

Sample of the color magenta

"yellow""y"[1 1 0]"#FFFF00"

Sample of the color yellow

"black""k"[0 0 0]"#000000"

Sample of the color black

"white""w"[1 1 1]"#FFFFFF"

Sample of the color white

下表列出了浅色和深色主题中绘图的默认调色板。

调色板调色板颜色

"gem" - 浅色主题默认值

在 R2025a 之前的版本中: 大多数绘图默认使用这些颜色。

Sample of the "gem" color palette

"glow" - 深色主题默认值

Sample of the "glow" color palette

您可以使用 orderedcolors 和 rgb2hex 函数获取这些调色板的 RGB 三元组和十六进制颜色代码。例如,获取 "gem" 调色板的 RGB 三元组并将其转换为十六进制颜色代码。

RGB = orderedcolors("gem");
H = rgb2hex(RGB);

在 R2024a 之前的版本中: 使用 H = compose("#%02X%02X%02X",round(RGB*255)) 获取十六进制颜色代码。

在 R2023b 之前的版本中: 使用 RGB = get(groot,"FactoryAxesColorOrder") 获取 RGB 三元组。

将内容追加到现有文件,指定为 true 或 false。

此选项适用于:

  • 将内容导出为现有 PDF 文件的最后一页。多次调用带 Append 选项的 exportgraphics 以添加多个页。

  • 将内容导出为动画 GIF 文件中的最后一帧。多次调用带 Append 选项的 exportgraphics 以添加多个帧。

注意

您可以使用 Append 参量从具有相同坐标区范围的图中创建基本动画 GIF 文件。如果各图之间的坐标区范围不同,请考虑在创建图时使用 axis("manual") 或 xlim、ylim 或 zlim 函数来冻结坐标区范围。

要创建图像动画或更复杂的图形,请使用 imwrite。有关使用 imwrite 的详细信息,请参阅写入 GIF 动画。

如果使用现有文件的名称的同时将 Append 选项设置为 false,则 MATLAB 会用新内容覆盖文件内容。

此选项仅支持 PDF 和 GIF 文件。

已保存图形的颜色空间,指定为 "rgb"、"gray" 或 "cmyk"。

  • "rgb" - 导出真彩色 RGB 内容。

  • "gray" - 将内容转换为灰度。

  • "cmyk" - 将内容转换为青色、品红色、黄色和黑色 (CMYK)。仅此颜色空间支持 EPS 文件。

导出 HTML 文件时不支持此名称-值参量。

自 R2025a 起

保存的图形的宽度,指定为 "auto" 或正数。要指定自定义宽度,请指定数字。默认情况下,图像文件的单位是像素,矢量图文件的单位是磅。您可以使用 Units 名称-值参量来指定不同单位。所有宽度值都包括图形周围的任何填充。默认情况下,保存的图形包含很窄的填充边距,但您可以通过指定 Padding 名称-值参量来更改它。

当 Width 值为 "auto" 时,会根据 Height 值选择保持纵横比的宽度。

注意

保存图像文件时,默认 Width ("auto") 取决于 Resolution 名称-值参量,默认情况下为 150。要使用默认宽度并更好地匹配屏幕上的显示大小,请将 Resolution 名称-值参量指定为 get(groot,"ScreenPixelsPerInch") 返回的值。例如:

sppi = get(groot,"ScreenPixelsPerInch");
exportgraphics(gca,"myplot.png",Resolution=sppi)

自 R2025a 起

保存的图形的高度,指定为 "auto" 或正数。要指定自定义高度,请指定数字。默认情况下,图像文件的单位是像素,矢量图文件的单位是磅。您可以使用 Units 名称-值参量来指定不同单位。所有高度值都包括图形周围的任何填充。默认情况下,保存的图形包含很窄的填充边距,但您可以通过指定 Padding 名称-值参量来更改它。

当 Height 值为 "auto" 时,会根据 Width 值选择保持纵横比的高度。

注意

保存图像文件时,默认 Height ("auto") 取决于 Resolution 名称-值参量,默认情况下为 150。要使用默认高度并更好地匹配屏幕上的显示大小,请将 Resolution 名称-值参量指定为 get(groot,"ScreenPixelsPerInch") 返回的值。例如:

sppi = get(groot,"ScreenPixelsPerInch");
exportgraphics(gca,"myplot.png",Resolution=sppi)

自 R2025a 起

保存的图形周围的填充,指定为下表中的值之一。

值描述示例

"tight"

包括足够的填充以包含 x 和 y 轴标签、标题和装饰元素,如图例和颜色栏。

导出 HTML 文件时不支持此值。

创建一个条形图,并将其导出为具有 "tight" 填充的图像。由于 "tight" 是默认填充值,您无需指定它。

图像周围的灰色边框勾勒出捕获区域的轮廓。边框不是已保存图像的一部分。

bar(1:5)
title("My Bar Chart")
ax = gca;
exportgraphics(ax,"tightpadding.png")

Saved image of a bar chart with just enough padding to include the x- and y-axes labels and the chart title

"figure"

包括与图窗窗口中所示相同的相对填充量。

创建一个条形图,并将其导出为具有 "figure" 填充的图像。

图像周围的灰色边框勾勒出捕获区域的轮廓。

bar(1:5)
title("My Bar Chart")
ax = gca;
exportgraphics(ax,"figurepadding.png","Padding","figure")

Saved image of a bar chart with the same relative amount of padding as in the figure window

正数

包括指定的填充量。默认情况下,图像文件的单位是像素,矢量图文件的单位是磅。您可以使用 Units 名称-值参量来指定不同单位。

创建一个条形图,并将其导出为填充 100 像素的图像。

图像周围的灰色边框勾勒出捕获区域的轮廓。

bar(1:5)
title("My Bar Chart")
ax = gca;
exportgraphics(ax,"100pixelpadding.png",Padding=100)

Saved image of a bar chart with 100 pixels of padding

自 R2025a 起

Width、Height 和 Padding 值的单位,指定为 "auto"、"pixels"(仅适用于图像)、"inches"、"centimeters" 或 "points"(其中 1 磅 = 1/72 英寸)。

默认值 "auto" 将图像文件的单位设置为 "pixels",而将矢量图文件的单位设置为 "points"。

自 R2025a 起

保留原始纵横比,指定为 "auto"、"on" 或 "off"。

值 "auto" 使 exportgraphics 能够选择 "on" 或 "off",具体取决于您是否指定 Width 和 Height 名称-值参量以及组合是否会更改纵横比。如果您指定 Width 或 Height 名称-值参量(但不是同时指定两者),则 exportgraphics 会保留原始纵横比。如果您为两个维度都指定了值,并且这些值会更改纵横比,则该函数不会保留原始纵横比。

下表总结了 "on" 和 "off" 值的行为。

值描述示例

"on"

保留原始图形的纵横比。

  • 如果您指定 Width 或 Height 值(但不是同时指定两者),则 exportgraphics 会缩放未指定的维度以保留原始纵横比。

  • 如果您指定 Width 和 Height 值,并且该组合会更改纵横比,则 exportgraphics 会添加填充以保留原始纵横比。

创建一个条形图。然后将该图另存为图像。仅指定 Width 值。exportgraphics 会缩放高度以保持原始纵横比。

图像周围的灰色边框勾勒出捕获区域的轮廓。边框不是已保存图像的一部分。

bar(1:5)
ax = gca;
exportgraphics(ax,"scaledchart.png",Width=250, ...
                 PreserveAspectRatio="on")

Saved image of a bar chart with the same aspect ratio as the original chart

将图另存为具有 Width 和 Height 值的图像,这些值会导致图像的纵横比与原始图不同。exportgraphics 会添加填充以在实现指定维度的同时保留图的纵横比。

exportgraphics(ax,"paddedchart.png",Width=250,... 
          Height=350,PreserveAspectRatio="on")

Saved image of a bar chart with padding on the top and bottom to preserve the aspect ratio of the chart

"off"

不保留原始纵横比。如果 Width、Height 或这两个值都更改纵横比,exportgraphics 不会应用任何缩放或填充;而且与原始图形相比,最终的输出看起来会拉伸或压缩。

创建一个条形图。然后将该图另存为具有 Width 和 Height 值的图像,这些值会导致图像的纵横比与原始图不同。

该图像显示图的拉伸版本。图像周围的灰色边框勾勒出捕获区域的轮廓。

bar(1:5)
ax = gca;
exportgraphics(ax,"stretched-chart.png",Width=250,... 
          Height=350,PreserveAspectRatio="off")

Saved image of a bar chart that is vertically stretched compared to the original chart

替代功能

使用图窗工具条 (自 R2025a 起)

在图窗选项卡中,点击另存为按钮的下半部分,然后选择导出为菜单项。有关详细信息,请参阅从图窗工具条打印或导出图窗。

使用坐标区工具栏

将鼠标置于坐标区工具栏中的导出按钮 上以显示下拉菜单,其中包含用于导出内容的选项:

  • Save As icon:将内容保存为一个精确裁剪的图像或 PDF。

  • Copy as Image icon:将内容复制为图像。

  • Copy as Vector Graphic icon:将内容复制为矢量图。

版本历史记录

在 R2020a 中推出

全部展开