R이 플롯을 PNG 파일로 렌더링하는 데 문제가 있는 이유는 무엇입니까?

R이 플롯을 PNG 파일로 렌더링하는 데 문제가 있는 이유는 무엇입니까?

나는 R이 UNIX에서 매우 기본적인 플로팅 등을 수행하도록 하려고 노력하고 있지만 X11이 필요하지 않은데도 X11과 관련된 이상한 오류가 발생합니다.

행렬 이름이 있고 d실제로 이미지를 표시하지 않고(X11을 사용하고 싶지 않기 때문에) 이 행렬의 히트맵 이미지를 저장하고 싶습니다. 내 코드는 다음과 같습니다.

png(file="my_image.png")
heatmap(d)
dev.off()

문제는 다음과 같은 오류가 발생한다는 것입니다.

Error in X11(paste("png::", filename, sep = ""), g$width, g$height, pointsize,  :
  unable to start device PNG

추가: 경고 메시지:

In png(file = "interative_hen.png") :
  unable to open connection to X11 display ''

R에 X11이 어떻게 필요한지 알 수 없기 때문에 이런 일이 일어나고 있는지 모르겠습니다. 설사 필요하더라도 X11이 설치되어 테스트한 모든 응용 프로그램에 대해 제대로 작동합니다.

답변1

R먼저, 사용 중인 버전에 PNG 기능이 있는지 확인하세요 . 프롬프트 capabilities()에서 함수를 호출하여 이를 수행할 수 있습니다 R. 다음과 유사한 목록이 인쇄되어야 합니다.

> capabilities()

jpeg    png    tiff    tcltk  X11    aqua     http/ftp  sockets
FALSE   FALSE  FALSE   TRUE   FALSE  FALSE    TRUE      TRUE

libxml  fifo   cledit  iconv  NLS    profmem  cairo
TRUE    TRUE   TRUE    TRUE   TRUE   FALSE    FALSE 

FALSE아래에 표시되면 명시적 PNG 지원을 사용하여 png수동으로 다시 컴파일해야 합니다 . R필요한 빌드 종속성을 설치했다면 빌드 프로세스에서 자동으로 PNG 기능을 활성화해야 합니다.


마지막으로, 클러스터에서 실행 중인 로컬 X 서버가 없다고 가정하면 SSH 클라이언트가 제대로 구성되지 않았을 수 있습니다. 특히 X11 전달을 활성화했는지 확인하십시오( UNIX와 유사한 도구를 사용하는 경우 -X또는 플래그 사용 ). 또는 가상 프레임 버퍼를 사용해 볼 수도 있습니다.-Yssh

자세한 내용은 이 스택 오버플로 질문을 참조하세요.X11이 없는 서버에서 R을 실행하고 종속성 손상을 방지하는 방법.

관련 정보