主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

copygraphics

将绘图或图形内容复制到剪贴板

说明

copygraphics(obj)obj 指定的图形对象的内容复制到系统剪贴板。图形对象可以是任何类型的坐标区、图窗、独立可视化、分块图布局或图窗内的容器。剪贴板内容可用于粘贴到其他应用程序和文档中。

示例

copygraphics(obj,Name,Value) 指定用于将内容复制到剪贴板的其他选项。例如,copygraphics(gca,Resolution=300) 将当前坐标区的内容作为 300-DPI 图像复制到剪贴板。

示例

示例

全部折叠

创建一个线图并获取当前坐标区。然后将该坐标区的内容复制到剪贴板。

plot(rand(5,5))
ax = gca;
copygraphics(ax)

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

显示一个图像并获取当前坐标区。然后将该坐标区的内容复制为 300-DPI 图像。

I = imread('peppers.png');
imshow(I)
ax = gca;
copygraphics(ax,'Resolution',300)

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

自 R2025a 起

要指定复制内容的宽度和高度,请创建一个具有相似大小和纵横比的图窗。例如,在大小为 500×400 像素的图窗中创建一个针状图。然后将坐标区复制为 500×400 像素大小的图像,包含在每条边上填充的 10 个像素。

f = figure;
f.Position(3:4) = [500 400];
stem(1:10,"filled",LineWidth=2)
ylim padded
ax = gca;
copygraphics(ax,Units="pixels",Width=500,Height=400, ...
        ContentType="image",Padding=10)

Stem plot

显示一个具有超出坐标区边界的注解的绘图。然后复制图窗中的内容。

plot(1:10)
annotation('textarrow',[0.06 0.5],[0.73 0.5],'String','y = x ')
f = gcf;
copygraphics(f)

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

显示一个条形图并获取当前坐标区。然后将坐标区的内容复制为向量图。

bar([10 22 31 43])
ax = gca;
copygraphics(ax,'ContentType','vector')

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

在分块图布局中显示两个绘图。然后通过将 TiledChartLayout 对象传递给 copygraphics 函数,将这两个绘图复制到剪贴板。

t = tiledlayout(2,1);
nexttile
plot([1 2 3])
nexttile
plot([3 2 1])
copygraphics(t)

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

如果您只想复制其中一个绘图,请在调用 nexttile 函数时包含坐标区返回参量。然后将坐标区传递给 copygraphics 函数。

显示一个热图。然后将该图复制为向量图,并指定透明背景。

h = heatmap(rand(10,10));
copygraphics(h,'ContentType','vector','BackgroundColor','none')

Figure contains an object of type heatmap.

创建一个名为 copyapp.m 的程序文件,它显示一个绘图和一个用于将坐标区内容复制到剪贴板的按钮。在该按钮的回调函数中,调用 copygraphics 函数。

function copyapp
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','Copy Plot');
b.ButtonPushedFcn = @buttoncallback;

    function buttoncallback(~,~)
        copygraphics(ax)
    end
end

通过调用 copyapp 函数来运行该 App。当您点击复制图按钮时,坐标区内容将复制到剪贴板。系统不会复制坐标区周围的区域,包括按钮。

copyapp

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

输入参数

全部折叠

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

  • 任何类型的坐标区:AxesPolarAxesGeographicAxes 对象。

  • 使用 figureuifigure 函数创建的图窗。

  • 独立可视化,如 heatmap 图。

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

  • 图窗中的容器:PanelTabButtonGroup 对象。

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

名称-值参数

全部折叠

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

示例: copygraphics(gca,Resolution=300) 将当前坐标区的内容复制为 300-DPI 图像。

要复制的内容的类型,指定为以下选项之一:

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

  • "vector" - 将内容复制为可缩放到任何大小的向量图。

  • "image" - 将内容复制为光栅化图像。

注意

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

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

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]

  • 十六进制颜色代码是字符向量或字符串标量,以井号 (#) 开头,后跟三个或六个十六进制数字,范围可以是 0F。这些值不区分大小写。因此,颜色代码 "#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

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

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

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

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

复制图形的颜色空间,指定为 "rgb""gray"

  • "rgb" - 复制真彩色 RGB 内容。

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

自 R2025a 起

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

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

注意

  • 如果将 Width 指定为数字,则还必须将 ContentType 指定为 "image""vector"

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

    sppi = get(groot,"ScreenPixelsPerInch");
    copygraphics(gca,Resolution=sppi)

自 R2025a 起

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

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

注意

  • 如果将 Height 指定为数字,则还必须将 ContentType 指定为 "image""vector"

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

    sppi = get(groot,"ScreenPixelsPerInch");
    copygraphics(gca,Resolution=sppi)

自 R2025a 起

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

描述示例

"tight"

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

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

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

bar(1:5)
title("My Bar Chart")
ax = gca;
copygraphics(ax)

Copied 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;
copygraphics(ax,Padding="figure")

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

正数

包括指定的填充量。如果为 Padding 指定数值,则还必须将 ContentType 指定为 "image""vector"。您可以使用 Units 名称-值参量指定单位。图像的默认单位是 "pixels",向量图形的默认单位是 "points"

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

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

bar(1:5)
title("My Bar Chart")
ax = gca;
copygraphics(ax,ContentType="image",Padding=100)

Copied image of a bar chart with 100 pixels of padding

自 R2025a 起

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

默认值 "auto" 将图像的单位设置为 "pixels",而将向量图形的单位设置为 "points"

注意

如果指定 WidthHeightPadding 的值,则还必须将 ContentType 指定为 "image""vector"

自 R2025a 起

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

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

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

描述示例

"on"

保留原始图形的纵横比。

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

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

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

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

bar(1:5)
ax = gca;
copygraphics(ax,Width=250,ContentType="image", ...
             PreserveAspectRatio="on")

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

将图复制为具有 WidthHeight 值的图像,这些值会导致图像的纵横比与原始图不同。copygraphics 会添加填充以在实现指定维度的同时保留图的纵横比。

copygraphics(ax,Width=250,ContentType="image", ... 
          Height=350,PreserveAspectRatio="on")

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

"off"

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

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

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

bar(1:5)
ax = gca;
copygraphics(ax,Width=250,Height=350, ... 
          ContentType="image",PreserveAspectRatio="off")

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

限制

  • MATLAB Web App Server™ 不支持 copygraphics

  • MATLAB Online™ 仅支持复制图像(像素)。不支持向量图。 (自 R2024b 起)

替代功能

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

图窗选项卡中,点击复制图窗。有关详细信息,请参阅将图窗复制到剪贴板

使用坐标区工具栏

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

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

  • :将内容复制为图像。

  • :将内容复制为向量图。

版本历史记录

在 R2020a 中推出

全部展开