当前位置: 首页 > 知识库问答 >
问题:

如何保存高质量的绘图?

计燕七
2023-03-14

我在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')

非常感谢。

共有3个答案

祁承望
2023-03-14

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

首先,另存为SVG:

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

然后在浏览器中打开超文本标记语言(名为output.html),它会提示您保存SVG(这是一个令人沮丧的步骤,但目前没有办法用Ploly绕过它)。

然后,使用cairosvg使用更好的缩放将SVG转换为PNG。在这里看到我的另一个答案。我可以在使用python内部的cairosvg模块时指定缩放吗

於炯
2023-03-14

彼得·高尔特尼提供的答案给我的方框图带来了一个错误。

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

备选案文1。正如@chinsoon12建议的那样,保存为SVG。这段代码将打开网络浏览器,然后使浏览器下载图像。请注意,将查看器设置为空将停止RStudio查看器窗格的工作,因此您需要保存它,保存绘图图像,然后还原它。

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)
万勇
2023-03-14

至少在Plotly v4中。7.1您可以将图形导出为SVG(因为这是一种矢量图形格式,质量非常高)。

为此,您需要安装包Rselenium。然后,您可以如下所示使用Ploly的导出函数(在本例中使用Chrome作为Selenium驱动程序):

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

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

这将下载图表作为filename.svg到您的默认下载目录(~/Download在许多Linux发行版或%USERPROFILE%\Download在Windows上)。如果您想将SVG下载到当前的R工作目录,您需要将几个选项传递给Selenium驱动程序(在本例中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

 类似资料:
  • 问题内容: 如何以高质量保存Python图形? 也就是说,当我继续放大保存在PDF文件中的对象时,为什么没有任何模糊? 另外,保存它的最佳方式是什么? ,?还是其他?我做不到,因为有一个隐藏的数字发生,导致编译混乱。 问题答案: 如果您正在使用Matplotlib并试图在LaTeX文档中获得良好数据,请另存为EPS。具体来说,请在运行命令以绘制图像后尝试以下操作: 我发现EPS文件效果最好,而参数

  • 问题内容: 我正在通过以下代码拍摄照片并将其保存到SD卡中,但是它产生的照片质量如此之低,即使100%的质量也是如此。也许bitmap.compress不是正确的方法(或根本不是位图?!) 这是我的代码: 问题答案: 请调用以下功能从相机捕获图像。 您可以在selectedImageUri变量中获取图像Uri。(图像存储在SD卡中)

  • 我正在做一个粒子在晶格中运动的随机行走模拟。因此,我必须创建大量的随机数,大约10^12及以上。目前,我正在使用C 11提供的可能性 问题是:我能做些什么来减少生成这些数字所需的CPU时间,以及对它们的质量有什么影响? 如您所见,我尝试了不同的引擎,但这对CPU时间没有太大影响。此外,我的uniform01(gen)和generate\u canonical之间有什么区别 编辑:通过阅读答案,我得

  • 对于投票、调查类的表单,往往会遇到随意填写或刷票的数据,这些数据不仅浪费提交量,也影响分析结果。从技术上讲,刷票不能完全避免,但可以提升刷票成本,从而降低刷票几率。 限制填写权限 开启方法:表单「设置」——「数据收集」上部,如图 1 所示: 图1 表单填写限制 图中的设置有如下效果: 所有人可填 杀伤力:★ 这是默认设置,打开表单的任何人都能够任意次数地提交数据。 仅金数据用户可填 杀伤力:★★★

  • 在问问题的时候,如何确保自己能尽快获得最专业和对症的回答呢?

  • 本文向大家介绍如何编写高质量JS代码,包括了如何编写高质量JS代码的使用技巧和注意事项,需要的朋友参考一下 想写出高效的javascript类库却无从下手; 尝试阅读别人的类库,却理解得似懂给懂; 打算好好钻研js高级函数,但权威书上的内容太零散, 即使记住“用法”,但到要“用”的时候却没有想“法”。 也许你和我一样,好像有一顾无形的力量约束着我们的计划,让我们一再认为知识面的局限性,致使我们原地