引言

有时候在服务器上绘图会受到结果不显示的困扰,无论是R还是python都会有类似的情况,那么有什么比较方便的应用呢?

本文的前提是你使用VScode并以安装好python等环境,可以日常在服务器工作。

使用的方案是X协议,详细介绍见[4]. 具体使用软件是MacOS的Quartz或Windows的Xming, Linux的xauth, VScode的插件remote X11和remote X11(ssh).

效果展示

python matplotlib绘图演示

过程

可视化方案

大概需要三个步骤:

  1. 安装本地X端 (X client)
  2. 安装服务器X端 (X Server)
  3. 安装和配置VScode插件

安装本地X端 (X client)

MacOS

MacOS用的应用是Quartz, 可以直接从官网[5]下载,也可以从brew下载。

一般情况都推荐brew, 但是我Ventura 13.0.1 (22A400) 系统的Apple M1不可用,所以尽量建议官网下载安装包,安装之后记得重启一下。

1
brew install xquartz

Windows

Windows用的应用是Xming[6], 具体应用和配置见[1,2,3].

安装服务器X端 (X Server)

主要需要安装的是xauth, 建议一并安装xclock方便测试。

如果是centOS可以使用yum install -y xauth xclock.

安装和配置VScode插件

需要的插件有两个:

  1. remote X11
  2. remote X11 (ssh)

已有免密登录的情况下,在Remote Explorer 中点击设置,在Host下面增加三句转发指令

1
2
3
4
5
6
Host 172.18.187.21
HostName 172.18.187.21
User root
ForwardX11 yes
ForwardX11Trusted yes
ForwardAgent yes

如果没有免密登录,可以通过下面的代码[7]:

1
2
ssh-keygen 
scp-copy-id user@host

结论

当需要不断改图或者用matplotlib以外的东西画图时,还是有个可视化窗口方便一些。

篇外

其他方案

其实保存图看也不是不可以,也挺方便。

R

先提供两种R不用可视化的方案:

自带:

1
2
3
4
5
6
7
# 1. 画板
pdf("filename.pdf")
plot()
dev.off()

# 2. ggplot
ggsave("filename.pdf")

然后是R可视化方案:

主要是配合VScode使用httpgd包:

1
httpgd::hgd()

甚至可以通过修改根目录的.Rprofile文件来自动使用:

1
2
3
4
5
6
7
8
9
if (interactive() && Sys.getenv("TERM_PROGRAM") == "vscode") {
if ("httpgd" %in% .packages(all.available = TRUE)) {
options(vsc.plot = FALSE)
options(device = function(...) {
httpgd::hgd(silent = TRUE)
.vsc.browser(httpgd::hgd_url(), viewer = "Beside")
})
}
}

python

matplotlib绘图

1
2
3
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
plt.savefig('myplot.png')

借助matplotlib绘图

1
2
3
4
5
6
7
8
9
import matplotlib

matplotlib.use("Agg")
import matplotlib.pyplot as plt
import igraph as ig

fig, ax = plt.subplots()
ig.plot(g, layout=layout, target=ax)
plt.savefig("test.png")

(其实大概也有自己的绘图保存方式比如ig.plot(g, "social_network.pdf"))

引用

  1. VScode 使用 remote-ssh 的情況下,如何使 plt.show() 正常工作 - 简书
  2. Xming X Server for Windows - Official Website
  3. macOS windows x11 - 简书
  4. macOS使用XQuartz支持X11实现Linux图形化界面显示 - 知乎
  5. XQuartz
  6. Xming X Server for Windows - Official Website
  7. 手把手教你免密码连接ssh(适用于win、Linux) - 知乎