如何以高质量保存阴谋图?

时间:2017-04-11 20:17:20

标签: r plotly

我在剧情中制作的每一张图都看起来很棒,直到我保存它的那一刻,所以图像看起来有点哑光,如果它有意义,那就是非常糟糕的质量。有谁知道如何以高品质保存它?您可以使用此基本图表作为示例。

library(plotly)

x <- c(1:100)
random_y <- rnorm(100, mean = 0)
data <- data.frame(x, random_y)

p <- plot_ly(data, x = ~x, y = ~random_y, type = 'scatter', mode = 'lines')

谢谢!

4 个答案:

答案 0 :(得分:5)

至少在最新的Plotly v4.7.1中,您可以将图形导出为SVG(因为它是矢量图形格式,这可能是最高质量的)。

为此,您需要安装包import java.util.Random; import java.util.Scanner; public class questionFive { public static void main(String[] args) { int [] numbers = new int [5]; Scanner keyboard = new Scanner (System.in); Random rand = new Random(); int delete; for (int i= 0; i < numbers.length; i++) { System.out.print("Enter in your values for the array: "); numbers[i] = keyboard.nextInt(); } for(int val : numbers) { System.out.println("The next value is " + val); } System.out.println("What element would you like to delete?"); delete = keyboard.nextInt(); for (int i = 0; i < 9; i++) { numbers[i] = delete; System.out.println(i); } while (delete <=5){ System.out.println("Invalid element. Try again."); delete = keyboard.nextInt(); // numbers[delete]; } } } 。然后您可以使用Plotly的Rselenium函数,如下所示(在此示例中使用Chrome作为Selenium driver):

export

这会将图表if ( !require(RSelenium) ) { install.packages("RSelenium", repos = "https://cloud.r-project.org/") } p %>% export(file = "filename.svg", selenium = RSelenium::rsDriver(browser = "chrome")) 下载到您的默认下载目录(许多Linux发行版上的filename.svg或Windows上的~/Downloads)。如果你想将SVG下载到当前的R工作目录,你需要将几个选项传递给Selenium驱动程序(本例中为Chrome):

%USERPROFILE%\Downloads

可以在此要点中找到更复杂的自定义导出功能,该功能允许设置导出的SVG的宽度和高度(以及更多包括可选的PDF和PNG转换):https://gist.github.com/salim-b/32c4370cee4ac0a3fbfef13a9ce98458

答案 1 :(得分:0)

如果像我一样,您尝试在离线模式下使用Plotly,我建议您执行以下步骤:

首先,保存为SVG:

fname = "/home/me/output"
plot(fig, filename=fname, image='svg', image_filename=fname)

然后在您的浏览器中打开HTML(名为output.html),它会提示您保存SVG(这是一个令人沮丧的步骤,但目前没有办法解决它与Plotly)。

然后,使用cairosvg将SVG转换为PNG,使用更好的缩放。在这里看到我的其他答案。 Can I specify scaling when using the cairosvg module inside of python

答案 2 :(得分:0)

@Peter Gaultney提供的答案为我的盒子图制作了一个错误。

这两种方法可能适用于更多情况并提高图像质量using htmlwidgets::onRender().

选项1.正如@ chinsoon12建议的那样,保存为SVG。此代码将打开Web浏览器,然后使浏览器下载图像。请注意,将查看器设置为null将阻止RStudio查看器窗格工作,因此您需要保存它,保存绘图图像,并then restore it.

library(htmlwidgets)

# Save viewer settings (e.g. RStudio viewer pane)
op <- options()

# Set viewer to web browser
options(viewer = NULL)

# Use web browser to save image
p %>% htmlwidgets::onRender(
  "function(el, x) {
  var gd = document.getElementById(el.id); 
  Plotly.downloadImage(gd, {format: 'svg', width: 600, height: 800, filename: 'plot'});
  }"
 )

# Restore viewer to old setting (e.g. RStudio)
options(viewer = op$viewer)

选项2.您可以另存为PNG并指定更高的分辨率。您应该增加此方法的线条粗细,字体等。

library(htmlwidgets)

# Save viewer settings (e.g. RStudio viewer pane)
op <- options()

# Set viewer to web browser
options(viewer = NULL)

# Use web browser to save image
p %>% htmlwidgets::onRender(
  "function(el, x) {
  var gd = document.getElementById(el.id); 
  Plotly.downloadImage(gd, {format: 'png', width: 1200, height: 1600, filename: 'plot'});
  }"
 )

# Restore viewer to old setting (e.g. RStudio)
options(viewer = op$viewer)

答案 3 :(得分:-1)

如果你深入了解情节js库,你会找到一个&#34; scale&#34;参数,这很容易使用。以下将产生1200 x 1600 png。

<div class="articlecontainer">
  <ol>
    <li>Item 1</li>
    <li>Item 2</li>
    <ol>
      <li>Sub-item 1</li>
      <li>Sub-item 2</li>
      <li>Sub-item 3</li>
    </ol>
    <li>Item 3</li>
  </ol>
</div>