服务器上R调用png显示x11报错怎么办?

2023-10-27

太长不读版

  • 治本的方法,服务器安装pango, 之后重新编译R语言
  • 治标的方法,在R的配置文件中增加options(bitmapType='cairo')

服务器上装完R语言之后,发现自己的PNG函数无法正常调用,始终会出现一个X11连接失败的错误。

> png('ab.png')
Error in .External2(C_X11, paste0("png::", filename), g$width, g$height,  :
  unable to start device PNG
In addition: Warning message:
In png("ab.png") : unable to open connection to X11 display ''

使用 capabilities查询之后,的确是没有启用X11。

> capabilities()
       jpeg         png        tiff       tcltk         X11        aqua
       TRUE        TRUE        TRUE        TRUE       FALSE       FALSE
   http/ftp     sockets      libxml        fifo      cledit       iconv
       TRUE        TRUE       FALSE        TRUE        TRUE        TRUE
        NLS       Rprof     profmem       cairo         ICU long.double
       TRUE        TRUE       FALSE        TRUE        TRUE        TRUE
    libcurl
       TRUE

回溯到我源代码的配置过程,发现配置项目包括X11的界面支持,Interfaces supported:X11, tcltk. 但是我思索了下,这个X11支持指的应该是Linux的图形界面下的R,而不是终端的R,我的直觉告诉我,这个信息应该是和我们的报错无关了。

之后,我又去查了下其他资料,谢益辉提到这可能是png函数的type参数选择出现了问题,也就是下面这段函数

    if (missing(type))
        type <- getOption("bitmapType")

进一步这个bitmapType选项的设置又和 grDevices:::.onLoad函数中的.Call(C_cairoProps, 2L)有关。其中.Call是R语言调用C语言编写函数的一种方式,回溯到对应的C代码(代码位置为src/library/grDevices/src/init.c)

#ifndef _WIN32
/* This really belongs with the X11 module, but it is about devices */
static SEXP cairoProps(SEXP in)
{
    int which = asInteger(in);
    if(which == 1)
        return ScalarLogical(
#ifdef HAVE_WORKING_CAIRO
            1
#else
            0
#endif
            );
    else if(which == 2)
        return ScalarLogical(
#ifdef HAVE_PANGOCAIRO
            1
#else
            0
#endif
            );
    return R_NilValue;
}
#endif

还好,我略懂一些C语言,发现这个输出结果又和变量 HAVE_PANGOCAIRO 有关。 搜索R源代码中所有和HAVE_PANGOCAIRO有关的内容,发现在configure有相关记录,对应的逻辑判断语句如下

if test "x${r_cv_has_pangocairo}" = xyes; then

printf "%s\n" "#define HAVE_PANGOCAIRO 1" >>confdefs.h

fi

进一步,我们在configure中查找 r_cv_has_pangocairo, 找到如下的判断语句

else $as_nop
  if "${PKG_CONFIG}" --exists pangocairo; then
         r_cv_has_pangocairo="yes"
       else
         r_cv_has_pangocairo="no"
       fi

fi

那看来有可能是pangocairo这个库出现了问题。使用下列代码在我的服务器上测试,发现输出是no, 说明的确没有安装。

/bin/pkg-config --exists pangocairo && echo "yes" || echo "no"

我尝试着用下述代码安装pango

# CentOS
sudo yum install pango-devel pango libpng-devel
# ubuntu
sudo apt install libpango-1.0-0

对R进行重新编译安装,发现 getOption("bitmapType") 得到的结果是cairo,符合预期了。

当然,你可能也不需要那么麻烦的方法,还有一种简单的思路是在 ~/.Rprofile中加入这一行,手动指定cairo。

options(bitmapType='cairo')

注意: 直接用apt/yum安装的R, getOption("bitmapType") 输出直接是 cairo.

参考资料

  • https://stackoverflow.com/questions/17243648/cant-display-png
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

服务器上R调用png显示x11报错怎么办? 的相关文章

  • ggplot 中的错误问题:“grid.Call(”L_textBounds“, as.graphicsAnnot(x$label), x$x, x$y, … 中的错误”[重复]

    这个问题在这里已经有答案了 我试图在 ggplot 中制作一个条形图 其中我通过强制其中一些标签为长度为零的字符串 即 来指定要显示的标签 但是 我收到错误 Error in grid Call L textBounds as graphi
  • dplyr,do(),从模型中提取参数而不丢失分组变量

    R 帮助中关于 do 的示例略有不同 by cyl lt group by mtcars cyl models lt by cyl gt do mod lm mpg disp data coefficients lt models gt d
  • 如何在 R 中为传单中的数值变量设置不对称颜色渐变

    我想让传单调色板以零为中心 红白绿发散 我已经尝试过中所说的这个帖子 https stackoverflow com questions 29262824 r center color palette on 0 当我尝试手动创建颜色时 我得
  • 限制数据框中所有单元格的字符串长度?

    您好 有没有一种方法可以限制 data frame 中所有列的字符串文本大小 而不必循环遍历每一列并一次使用 str trunc 之类的东西 例如下面的数据框 我可以将所有文本大小限制为仅 5 个字符 而不必一次只执行一列吗 如果有 50
  • R 中的发散积分可在 Wolfram 中求解

    我知道我以前问过同样的问题 但由于我是新来的 这个问题问得不好而且不可重现 因此我在这里尝试做得更好 如果我只编辑旧的 可能没有人会读它 我有一个想要积分的二重积分 ff lt function g t exp 16 g exp 8 t t
  • 如何获得属于五分位数的x?

    我正在大学学习使用 R 进行计量经济学项目 所以请原谅我的笨拙 基本上 使用并给出 一个矩阵 股票价格 行 天 列 公司股票价格 另一个矩阵 市值 行 天 列 公司市值 我必须收集第三个矩阵每天观察的属于市值分布第一五分位数的股票价格 然后
  • 在 R 中绘制对数正态概率密度

    我正在尝试在 R 中生成对数正态概率密度图 其中包含 3 个不同的均值对数和标准差对数 我尝试了以下方法 但我的图表太丑了 看起来一点也不好看 x lt seq 0 10 length 100 a lt dlnorm x meanlog 0
  • 在另一个 Rmd 中运行选定的块

    我已经在源 Rmd 文件中运行了分析 并且希望仅使用few来自源的块 我已经看到了一些关于从源 Rmd 中提取所有块的答案来自另一个 Rmd 中的 Rmd 文件的源代码 https stackoverflow com questions 4
  • R 更改小数位且不四舍五入

    gt signif 1 89 digits 2 1 1 9 我想要1 8 这有点笨拙 但它会起作用并保持所有数字 x lt 1 829380 trunc dec lt function x n floor x 10 n 10 n Resul
  • 仅保留百分比的尾随零

    给出以下示例 library pander tableAbs lt Titanic 1 1 tablePct lt round prop table tableAbs 100 2 table lt cbind tableAbs tableP
  • R:将 JSON 时间格式转换为 POSIX

    我有一个 JSON 字符串 并将其放入数据框中 我能够做到这一点 但我在使用 apply 函数之一将所有时间字符串转换为 POSIX 格式时遇到问题 See here https stackoverflow com questions 90
  • R 中的 Websocket

    我设法在 R 中建立到 Mtgox websocket 的连接 规格如下 url https socketio mtgox com mtgox Currency USD https socketio mtgox com mtgox Curr
  • GGPLOT2:如何在 ggplot() 脚本中绘制特定选择

    这是一个名为的大型数据集的峰值P 其中有 10 个优惠 CS 有不同的商店 SHP 具有多个数值 数据集列出了按周排序的它们 WK 2 tm 52 它创建一个大文件 仅前 6 行出现峰值 WK MND CS SHP RevCY RevLY
  • R - tidyr - 变异并传播多列

    我在 R 中有以下数据框 my df test lt data frame V1 c 1 2 1 V2 c A B A V3 c S1 S1 S2 V4 c x x x V5 c y y y V6 c A B C V7 c D E F my
  • 提取部分字符串值,创建新的列名称,并使数据框宽

    我想提取字符串列的最后一部分 始终用方括号括起来 将它们作为新列的名称 然后将数据从长调整为宽 并用这些值填充新列 例如 如果我有这个数据框 whatihave lt data frame v1 c abc effort def effor
  • R - Quantstart:多种股票的测试策略

    我正在使用一些指标构建基本交易策略 我的问题是我希望它在多个股票上运行 而不必指定我想要测试的每个单独的股票 目前我可以使用向量一次获取多个符号 如下所示 Get Shares from Yahoo Finance Stocks lt AS
  • 使用许多特殊字符将 R 连接到 HANA 数据库时出现问题

    我在将 HANA 数据读入 R 时遇到问题 我已通过以下方式建立了连接 ch lt odbcConnect HANA uid USER pwd PW 并确认我已通过以下方式连接 sqlTables ch 这会调出我的表格列表 对我想要拉取的
  • 迭代字符串 R 的字符

    有人可以解释一下为什么这不会在 R 中单独打印所有数字 numberstring lt 0123456789 for number in numberstring print number 字符串不就是字符数组吗 在 R 中该怎么做 In
  • 根据R中的前一行和当前行按组计算

    我可以根据 R 中的前一行和当前行进行计算 对于此数据框 df A B 1 2 2 2 2 3 3 4 5 5 B2 A2 0 5 B1 我可以使用这段代码来计算这个函数 for i in 2 nrow df B i lt 1 2 B i
  • R 包与 Rcpp 的链接错误:“未定义符号:LAPACKE_dgels”

    我正在创建一个 R 包 lapacker 以使用 R API 头文件 R ext Lapack h 为 R 提供和使用的内部 LAPACK 库 仅具有双精度和双复数 提供 C 接口 源代码 https github com ypan1988

随机推荐

  • 首次域名注册

    什么是域名 域名是Internet网络上的一个服务器或一个网络系统的名字 在全世界 没有重复的域名 域名的形式是以若干个英文字母或数字组成 由 分隔成几部分 如 56dr cn 就是一个域名 域名与网址有什么区别 一个完整网址范例如下 ht
  • 如何评价代码的好坏?

    我们一般从可维护性 可读性 可扩展性 可测试性 可复用性 简洁性来评价代码的质量 可维护性 所谓维护无外乎就是修改bug 修改老的代码 添加新的代码之类的工作 代码易维护指的是在不破坏原有代码设计 不引入新的bug的前提下 能够快速的修改或
  • python基础(5):深入理解 python 中的赋值、引用、拷贝、作用域

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 在 python 中赋值语句总是建立对象的引用值 而不是复制对象 因此 python 变量更像是指针 而不是数据存储区域 这点和大多数 OO 语言类似吧 比如 C java
  • JAVA基础学习笔记1

    教程来源 https www runoob com java java tutorial html 以下是个人学习笔记 用水平线划分小节 我的第一个JAVA程序 通常都写成这样 public class HelloWorld public
  • Spring Boot -01- 快速入门篇(详解图文教程)

    作者 肖朋伟 来源 https blog csdn net qq 40147863 article details 84194493 Spring Boot 01 快速入门篇 图文教程 今天开始不断整理 Spring Boot 2 0 版本
  • Windows安装Ubuntu双系统(Win11+最新Ubuntu22.04.1LTS)

    目录 前言 一 查看基础环境 二 准备安装文件 1 下载Ubuntu 22 04 01 LTS镜像ISO文件 2 下载官方推荐的U盘启动制作工具 3 制作启动U盘 4 新建硬盘分区用来安装Ubuntu系统 5 BIOS设置 三 安装Ubun
  • stata学习笔记①stata基础介绍

    文章目录 一 为什么要学stata 二 软件基本解释 1 软件界面 2 导入示例数据 3 认识几个重要的功能符号 三 数据的基本观测 四 统计性描述 1 codebook 数据字典使用 2 summarize 五 图像初步探索 1 hist
  • 华硕服务器RS720-E10-RS12无法安装win10到M.2的NVME SSD

    进BIOS开启CSM 兼容性支持模块
  • 区块链浏览器与合约代码

    声明 此文系 Vue3 0 Quasar ethers js 和以太坊智能合约交互 系列教程之一 开始 区块链浏览器 在本教程中 我一直在说区块链是去中心化的 它想打造的是一个数据永不可篡改且公开透明的数据世界 那么这样的区块链它最重要的一
  • linemod算法过程理解

    一 提取模板 1 预处理 使用高斯模糊预处理将要作为模板的RGB图 2 模板梯度计算 分别计算RGB三个通道中每个像素点x和y方向的梯度 sobel算子 取幅值最大的作为该像素的梯度 若梯度幅度值小于阈值 则被舍弃 3 梯度离散化及量化 对
  • 01 逻辑回归的理解

    1简介 逻辑回归是一个分类算法 本质是对线性回归做了一个变换 将值域压在0 1的空间 从而可以未每一个特征 估算出一个概率 作预测问题 二分类 逻辑回归问题 本质上就变成 求解变换后的每个特征的权重 ax1 bx2 cx3 0 1 求解模型
  • STM32的PWM和DAC练习

    文章目录 一 输出PWM波形 1 1 实验代码 1 2 调试 一 输出PWM波形 1 1 实验代码 代码来自野火STM32F103 mini开发板资料 1 书籍配套例程 F103RCMINI 32 TIM 高级定时器 3 TIM 高级定时器
  • 【牛客】HJ1 字符串最后一个单词的长度

    三行代码做一道题HJ1 字符串最后一个单词的长度 我的意思是不包括固定代码哦 读题 输出几个单词 以空格隔开 输出最后一个单词的长度 代码 直接写最终解题代码 include
  • vue路由传参的两种方式,实现返回上个页面不刷新

    我的项目是当在新增页面 下面叫A页面 先提交一些数据 然后跳转到下一个页面 下面叫B页面 再填写数据 然后返回到新增的页面 之前我直接跳转回B页面goback 这样的话跳转回来A页面就什么数据都没有了 解决方法有两种 一种是在地址栏里面拿参
  • 最简单自动化搜索的脚本代码

    from selenium import webdriver from selenium webdriver common by import By driver webdriver Chrome 打开的网址一般是get请求 driver
  • C语言学习记录——项目1 交换机后台管理之登录菜单(1)

    C语言学习记录 项目1 交换机后台管理之登录菜单 1 交换机 交换机 Switch 是一种用于电 光 信号转发的网络设备 它可以为接入交换机的任意两个网络节点提供独享的电信号通路 最常见的交换机是以太网交换机 其他常见的还有电话语音交换机
  • mysql 查询出表字段的属性

    SELECT column name 字段名 column comment 字段说明 column type 字段类型 column key 约束 FROM information schema COLUMNS WHERE table na
  • Node.js 基础篇(九):fs.watchFile

    目录 fs watch 监视 filename 的变化 fs watchFile 监视 filename 的变化 fs watch 监视 filename 的变化 fs watch filename options listener fil
  • 机器学习:matlab和python实现SVD(奇异值分解)算法

    1 SVD SVD Singular Value Decomposition 奇异值分解 SVD算法不光可以用于降维算法中的特征分解 还可以用于推荐系统 以及自然语言处理等领域 是很多机器学习算法的基石 假设我们现在有一个矩阵M m n 如
  • 服务器上R调用png显示x11报错怎么办?

    太长不读版 治本的方法 服务器安装pango 之后重新编译R语言 治标的方法 在R的配置文件中增加options bitmapType cairo 服务器上装完R语言之后 发现自己的PNG函数无法正常调用 始终会出现一个X11连接失败的错误