2017-04-11 78 views
2

每个图形,我做出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') 

谢谢!

+0

你究竟如何“保存”这些地块? – MrFlick

+0

@MrFlick使用导出>保存为图像> ... – LauraP

+0

如果您使用rstudio导出,您可以指定大小。使它变大将意味着更多的像素 – dww

回答

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

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) 
1

至少在最新Plotly v4.7.1可以将图形导出为SVG(因为是一个矢量图形格式,这是相当多质量尽可能高的)。

要做到这一点,你需要安装包Rselenium。然后你可以使用Plotly的export功能如下(在使用Chrome作为Selenium driver本示例):

if (!require(RSelenium)) { 
    install.packages("RSelenium", repos = "https://cloud.r-project.org/") 
} 

p %>% 
    export(file = "filename.svg", 
     selenium = RSelenium::rsDriver(browser = "chrome")) 

这将图表作为filename.svg下载到您的默认下载目录(~/Downloads很多Linux发行版或%USERPROFILE%\Downloads在Windows上)。如果你想下载SVG到的当前R的工作目录,而不是,你需要通过若干个选项,硒驱动器(Chrome在这个例子中):

p %>% 
    export(file = "filename.svg", 
     selenium = RSelenium::rsDriver(browser = "chrome", 
             extraCapabilities = list(
              chromeOptions = 
              list(prefs = list(
               "profile.default_content_settings.popups" = 0L, 
               "download.prompt_for_download" = FALSE, 
               "download.default_directory" = getwd()) 
              )))) 

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

0

如果你潜入图书馆的js库,你会发现一个“scale”参数,这很容易使用。以下将产生1200 x 1600 png。

Plotly.downloadImage(gd, {scale: 2, width: 600, height: 800})