VScode使用remote-ssh实现服务器上绘图可视化

2023-10-25 11:58:39 浏览数 (1)

引言

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

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

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

效果展示

过程

可视化方案

大概需要三个步骤:

  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不可用, 所以尽量建议官网下载安装包, 安装之后记得重启一下.

代码语言:shell复制
brew install xquartz
Windows

Windows用的应用是Xming6, 具体应用和配置见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下面增加三句转发指令

代码语言:text复制
Host 172.18.187.21
 HostName 172.18.187.21
 User root
 ForwardX11 yes
 ForwardX11Trusted yes
 ForwardAgent yes

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

代码语言:shell复制
ssh-keygen 
scp-copy-id user@host

结论

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

篇外

其他方案

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

R

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

自带:

代码语言:text复制
# 1. 画板
pdf("filename.pdf")
plot()
dev.off()

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

然后是R可视化方案:

主要是配合VScode使用httpgd包:

代码语言:text复制
httpgd::hgd()

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

代码语言:text复制
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绘图

代码语言:python代码运行次数:0复制
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
plt.savefig('myplot.png')

借助matplotlib绘图

代码语言:python代码运行次数:0复制
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) - 知乎

0 人点赞