如何在 rmarkdown 内联中更改 plotly 图形大小?

How to change plotly graph size in rmarkdown inline?

我希望在 R Markdown 中进行 EDA 时看到更大的绘图。如果我通过 ggplotly 或 plot_ly 等绘图函数更改图形大小,RStudio 会创建滚动条并且不会显示超过 800 像素的宽度。

这是我的代码:

gg1 <- cars |> 
  ggplot(aes(speed, dist)) +
  geom_point() 

gg1 |> 
  plotly::ggplotly(width = 1000, height = 800)

这是我看到的:

我尝试过但没有做任何事情的事情...

  1. out.width
  2. fig.width
  3. RStudio Tools > Global Options > R Markdown > Visual > Editor content width(我不知道这有什么作用)

现在,如果我输出到控制台而不是内联或编织到 html,那么代码会打印出更大的图形而不会出现任何错误。但我希望在 RStudio R Markdown 交互式会话内联中看到更大的图形。

我找不到在 R 或 R Markdown 中用作设置的方法。但是,我可以告诉你如何临时设置它。

您将使用:

  • RStudio 的开发者工具(RStudio 的标准部分)
  • 两组函数调用写在Javascript

这是临时。要将块输出重置为正常:

  • 收起区块
  • 重新运行块
  • 重新启动 RStudio

如果在 运行 函数之后添加块,它们将不会继承这些更改。如果要更改它们,请重新运行 函数。

The first line of each set of functions is variable initialization. Skip that first line of code if you run the functions a second time (or more).

这是要做的事情:

在 RStudio 的任意位置,右键单击,select“检查元素”

这将打开开发者工具。在开发人员工具 window 中,打开控制台抽屉。您可以 select 右上角的三个点并使用菜单来执行此操作。

在控制台抽屉中,您将粘贴我提供的函数。但是,对变量的调用只能进行一次。因此,第一次 运行 在 RStudio 的同一会话中,您将包含该行,之后就不会了。当您重新启动 RStudio 时,它会重置。您将需要再次包含该行。 (如果您重新启动开发人员工具,这将不会重置这些变量。)

控制台位于开发者工具的底部。

这是之前的...

这是第一次在 RStudio 会话中复制和粘贴的示例。

您会立即看到任何带有输出的块的宽度都发生了变化。

但是,您可能会注意到溢出是隐藏的。接下来是

您将在控制台抽屉中输入第二个函数以修复该更改。

这次看起来不会有什么不同!

当您查看区块输出时,它仍然看起来像是隐藏了内容。

从这里您必须拖动窗格,以强制调整大小。使其变大、变小,甚至 return 到您开始时的大小。将显示溢出。

最后但同样重要的是 Javascript 函数。

第一个:

//declare variables separately for reuse without duplicate initialization errors
var allOf, sAdd, styler, i, n;

allOf = document.querySelectorAll('[data-ordinal]'); //find them all
if (allOf==undefined || allOf==null) {
  allOf = document.querySelector('[data-ordinal]');  // if there is only one
}

sAdd = "max-width: none;"                       // create style to add

try{
  for(i = 0, n = allOf.length; i < n; i++){     //loop through them all
    styler = allOf[i].getAttribute("style");
    if (styler==undefined || styler==null) {    // if there are no HTML styles set
      styler = "";  
      console.log("No style attributes found for ", i)
    }
    if (styler!="width: 100%; max-width: 800px;") {   // if this isn't a chunk output as expected
      continue;
      console.log("Attributes not changed for ", i)
    }
    allOf[i].setAttribute("style",styler+sAdd);       // append style
    console.log("Attributes set for ", i);
}} catch(error) {
    console.error(error);
}

第二个:

//declare variables separately for reuse without duplicate initialization errors
var allMore, sAdd2, styler2, j, m

allMore = document.querySelectorAll('.ace_lineWidgetContainer > div'); // first child of class
if (allMore==undefined || allMore==null) {
  allMore = document.querySelector('.ace_lineWidgetContainer > div');  // if there is only one
}

sAdd2 = "overflow: visible;"           // create style to add

try{
  for(j = 0, m = allMore.length; j < m; j++){     //loop through them all
    styler2 = allMore[j].getAttribute("style");
    if (styler2==undefined || styler2==null) {    // if there are no HTML styles set
      styler2 = "";  
      console.log("No styles were found for ", j)
    }
    allMore[j].setAttribute("style",styler2+sAdd2); // append new styles
    allMore[j].style.height = null;                 // remove the height style
    console.log("Attributes set for ", j); 
}} catch(error) {
    console.error(error);
}

不必按特定顺序使用它们。但是,除了第一行(变量初始化)之外,如果您完全 运行 的话,您需要 运行 所有行。

如果出现问题或 RStudio 变成了自身的某个变异版本,只需重新启动 RStudio 以重置回原始大小。