引言
有时候在服务器上绘图会受到结果不显示的困扰, 无论是R还是python都会有类似的情况, 那么有什么比较方便的应用呢?
本文的前提是你使用VScode并以安装好python等环境, 可以日常在服务器工作.
使用的方案是X协议, 详细介绍见4. 具体使用软件是MacOS的Quartz或Windows的Xming, Linux的xauth, VScode的插件remote X11和remote X11(ssh).
效果展示
过程
可视化方案
大概需要三个步骤:
- 安装本地X端(X client)
- 安装服务器X端(X Server)
- 安装和配置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插件
需要的插件有两个:
- remote X11
- 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
文件来自动使用:
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")
)
引用
- VScode 使用 remote-ssh 的情況下,如何使 plt.show()正常工作 - 简书
- Xming X Server for Windows - Official Website
- macOS windows x11 - 简书
- macOS使用XQuartz支持X11实现Linux图形化界面显示 - 知乎
- XQuartz
- Xming X Server for Windows - Official Website
- 手把手教你免密码连接ssh(适用于win、Linux) - 知乎