有什么方法可以访问DescTools :: Desc()生成的绘图对象?

时间:2020-10-09 11:06:52

标签: r desctools

我正在使用DescTools中的Desc()来描述rmarkdown PDF文档中的一些变量。问题在于,当我编织文档时,它会生成3个在同一行中的图,从而剪切图像。

示例:

lambda = 1;               % wavelength

E0 = 1;                   % max value of E-field amplitude

% ==================================================================
% prepare the coordinates mesh
% ----------------------------

zLin = linspace(-201,201,400) * lambda;     % z-coordinate (horizontal)

rLin = linspace(-65,65,100) * lambda;       % radius-coordinate (vertical)

[z,r] = meshgrid(zLin,rLin);                % create mesh


% ===================================================================

wFactor = 4;                 
    
w0 = wFactor * lambda;                  % minimal waist

zR = pi* w0^2 / lambda;                 % Rayleigh length

w = w0 * sqrt( 1 + (z / zR) .^2 );      % Beam radius at any arbitrary distance (equ. 3)

% Irradiance
eta = 377;                              % for free space
I0 = abs(E0)^2/eta;

I = I0 .* (w0 ./ w).^2 .* exp( -2*(r./w).^2 );

surf(z,r,I); shading interp

输出包含3个图。我可以在结果[[1]]中使用列表找到各个响应,但找不到图对象,我认为这可能是将一个放置在另一个下方的一种方法。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

results中没有 个图对象。

相反,当您在控制台中键入results时,它将调用S3泛型print,后者又分派print.Desc方法。默认情况下,print.Desc将基于results的“ class”成员调用绘图函数,在您的示例中为"Date"。如果您在控制台中输入DescTools:::plot.Desc.Date,则每次打印results时,都会看到实际生成绘图的函数。

因此没有绘图对象。有数据可以创建绘图,并且每当您将results打印到控制台时,都会通过调用绘图函数来创建绘图。

Desc绘图函数似乎很少有可用于修改的选项,因此最好的选择可能是使用results中的数据来创建自己的绘图。如果您想查看results的内容而不显示情节,只需键入:

print(results, plotit = FALSE)

如果您希望一次绘制三个图,则可以执行以下操作:

DescTools:::plot.Desc.Date(results[[1]], type = 1)

enter image description here

DescTools:::plot.Desc.Date(results[[1]], type = 2)

enter image description here

DescTools:::plot.Desc.Date(results[[1]], type = 3)

enter image description here