在macOS、Windows上使用VSCode + SSH实现远程Matplotlib图形显示

news2024/10/5 13:07:52

简介

在 macOS 上使用 VSCode + SSH 环境来显示 Matplotlib 绘制的图形需要进行一些配置。因为默认情况下, Matplotlib 的图形是无法显示在远程计算机的桌面上的。您可以通过设置 Matplotlib 使用不同的后端(backend)来实现将图形显示在本地计算机上。

第一步:安装 运行 X11 服务器的工具

MacOS 安装XQuartz

XQuartz 是 macOS 上流行的 X Window 系统服务器,它允许在远程计算机上显示图形界面。您可以从 XQuartz 的官方网站(https://www.xquartz.org/)下载并安装它。安装完成后,打开 XQuartz,并在 “XQuartz” 菜单中选择 “设置(Preferences)”。在 “安全性(Security)” 选项卡中勾选 “Allow connections from network clients” 选项。

在我的尝试中发现这个选项不打开也可以正常显示Matplotlib输出的图像。

Windows安装 Xming 或 VcXsrv

Xming 和 VcXsrv 是在 Windows 上运行 X11 服务器的工具,它们允许将 Linux 远程服务器上的图形界面显示在 Windows 桌面上。

Xming 官网:https://sourceforge.net/projects/xming/
VcXsrv 官网:https://sourceforge.net/projects/vcxsrv/
下载并安装其中一个 X11 服务器工具。

第二步:设置 Matplotlib 的后端

在远程计算机上确保已经安装了 Matplotlib。然后,在远程计算机上创建或修改 Matplotlib 的配置文件。在终端中运行以下命令:

mkdir -p ~/.config/matplotlib
echo "backend : TkAgg" >> ~/.config/matplotlib/matplotlibrc

这将把 Matplotlib 的后端设置为 TkAgg,这个后端可以将图形显示在 XQuartz 上。
这是一种写配置文件的方式,好处是写好配置文件后每次Matplotlib的后端都是"TKAgg"。您也可以根据需要临时在python代码中指定后端。例如

import matplotlib

# 临时指定后端为TkAgg
matplotlib.use('TkAgg')

import matplotlib.pyplot as plt

# 此时绘图会使用TkAgg后端
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.show()

第三步:启用 SSH X11 转发

在本地计算机上通过 SSH 连接到远程计算机时,确保启用了 X11 转发。连接时,使用 -X-Y 选项,例如:

ssh -X username@remote_ip
# 或
ssh -Y username@remote_ip

-X和-Y的选择
通常可以使用 -X 选项,它足够安全且更普遍。但如果您对安全性有更高的要求,并且仅需要应用程序的显示功能,可以考虑使用 -Y 选项来启用安全 X11 转发。

第四步:绘制远程 Matplotlib 图形进行验证

现在,您可以在远程计算机上运行 Python 脚本,绘制 Matplotlib 图形,并使用 plt.show() 将其显示出来。图形应该会显示在您本地计算机上的 XQuartz 窗口中。例如,运行下面的代码

import matplotlib.pyplot as plt

plt.plot(range(10))
plt.show()

下面的图像就会通过XQuartz显示出来。
在这里插入图片描述

最后,如果遇到无法显示图形的问题,可以尝试一下vscode重新ssh连接。

总结

本文所示方法的主要思路是通过在 MacOS或Windows上安装一个 X11 服务器(如适合Windows的Xming 或 VcXsrv,适合MacOS的XQuartz),并在连接到远程 Linux 服务器时启用 SSH X11 转发,将 Linux 服务器上的图形界面显示到 Windows 桌面上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/779546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS: $‘\r‘: command not found

一、问题 在CentOS中执行脚本deploy.sh时,报错$‘\r’: command not found 原因:shell脚本是在Windows下编写,通过工具软件传输到CentOS中。而Windows下行结尾符号为\r\n ,linux下行结尾时\n,两者不同,所…

SpringBoot整合Redis和RabbitMQ练习

需求:用SpringBootRedisRabbitMQ技术,PostMan发送一个请求,存储到Redis中,并且在控制台获取打印该信息。用PostMan发送一个请求将信息存储到RabbitMQ,并且在监听该队列打印出信息。 练习1:SpringBootRedis PostMan发送一个请求,存…

【车载开发系列】AUTOSAR DemEventParameters

【车载开发系列】AUTOSAR DemEventParameters 【车载开发系列】AUTOSAR DemEventParameters 【车载开发系列】AUTOSAR DemEventParameters一. DemEventParameters的概念二. EventID三. DemEventKind1)DEM_EVENT_KIND_SWC2)DEM_EVENT_KIND_BSW 四. DemDTC…

Netty理论与实践(二) 创建http客户端 服务端

目录 开发实战1. 使用echo服务器模拟http2. netty http核心类3. 服务端4. 客户端 总结和源码参考 开发实战 1. 使用echo服务器模拟http 通过上一篇文章中的echo服务器程序来模拟一次HTTP请求。 接收消息的代码如下: public class ServerStringHandler extends S…

Acwing.003 完全背包问题(DP动态规划)

题目 有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。 第 i 种物品的体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 第一行两个整…

【计算机网络】简易UDP网络小程序

文章目录 1. socket函数:创建套接字2. 服务端2.1 服务端创建套接字2.2 服务端绑定2.3 字符串IP和整数IP2.4 运行服务器 3. 客户端3.1 客户端创建套接字3.2 启动客户端 4. 本地测试5. INADDR_ANY 1. socket函数:创建套接字 我们把服务封装成一个类&#…

计算机网络最基础知识介绍

OSI和TCP/IP是很基础但又非常重要的知识,很多知识点都是以它们为基础去串联的,作为底层,掌握得越透彻,理解上层时会越顺畅。今天这篇网络基础科普,就是根据OSI层级去逐一展开的。 01 计算机网络基础 01 计算机网络的分类 按照网络的作用范围:广域网(WAN)、城域网(MA…

【Kafka源码走读】Admin接口的客户端与服务端的连接流程

注:本文对应的kafka的源码的版本是trunk分支。写这篇文章的主要目的是当作自己阅读源码之后的笔记,写的有点凌乱,还望大佬们海涵,多谢! 最近在写一个Web版的kafka客户端工具,然后查看Kafka官网,…

Python基础教程:sklearn机器学习入门

1. sklearn基础介绍 sklearn(全名为scikit-learn)是一个建立在NumPy、SciPy和matplotlib等科学计算库的基础上,用于机器学习的Python开源库。它提供了丰富的工具和函数,用于处理各种机器学习任务,包括分类、回归、聚类…

线性表的顺序存储和链式存储—Python数据结构(二)

线性表 定义: 线性表的定义是描述其逻辑结构,而通常会在线性表上进行的查找、插入、删除等操作。 线性表作为一种基本的数据结构类型,在计算机存储器中映象(表示)一般有两种形式,一种是顺序映象,一种是链式映象。 线…

接口漏洞-WebService-wsdl+SOAP-Swagger+HTTP-WebPack

什么是接口? 接口就是位于复杂系统之上并且能简化你的任务,它就像一个中间人让你不需要了解详细的所有细节。像谷歌搜索系统,它提供了搜索接口,简化了你的搜索任务。再像用户登录页面,我们只需要调用我们的登录接口&am…

Jupyter 安装和使用

安装Jupyter 使用pip工具进行安装,在命令提示窗口输入命令如下: pip install jupyter notebook 使用Jupyter 在命令提示窗口输入如下命令,启动浏览器页面: jupyter notebook 修改jupyter的工作路径/存储路径 由于默认工作路…

去括号问题(C++处理)

继http://t.csdn.cn/kIcUT后的文章 题目描述 当老师不容易,尤其是当小学的老师更难:现在的小朋友做作业喜欢滥用括号。 虽然不影响计算结果,但不够美观,容易出错,而且可读性差。但又不能一棒子打死,也许他们就是将来的…

【Linux从入门到精通】进程的控制(进程退出+进程等待)

本篇文章主要讲述的是进程的退出和进程等待。希望本篇文章的内容会对你有所帮助。 文章目录 一、fork创建子进程 1、1 在创建子进程中操作系统的作用 1、2 写时拷贝 二、进程终止 2、1 常见的进程退出 2、2 进程的退出码 2、2、1 运行结果正确实例 2、2、2 运行结果不正确实例…

防御第二天-防火墙演示实验

1.上课思维导图 2.防火墙演示实验 防火墙FW1&#xff1a;原用户名&#xff1a;admin 原密码&#xff1a;Admin123 配地址&#xff1a;<USG6000V1>sy [USG6000V1]int g0/0/0 [USG6000V1-GigabitEthernet0/0/0]ip add 192.168.18.2 24 打开所有权限[USG6000V1-Gig…

C++(一):基本数据类型

基本数据类型 基本内置类型定义变量type field value;type field(value);type field{value};type field {value}; 数学常量及函数静态类型转换 static_cast格式化字符串std::stringstreamstd::string引入三方库 fmt/core.h 字符运算auto 关键字枚举类型数据类型定义别名判断是…

牛客网刷题之链表(一)

链表 NB1 删除链表峰值NB2 牛群排列去重NB3 调整牛群顺序NB4 牛群的重新分组NB5 牛群的重新排列NB6 合并两群能量值&#xff08;合并有序单链表&#xff09;NB7 牛群的能量值&#xff08;单链表相加&#xff09; 以下题全部出自牛客网。 题目题目考察的知识点链表&#xff1a; …

Element Plus 日期选择器

计算开始日期到结束日期的总天数 结构 <el-form-item label"计划开始时间" required prop"StartTime"><el-date-pickertype"date"v-model"ruleForm.StartTime":disabled-date"StartTime"placeholder"计划开始…

pytorch工具——使用pytorch构建一个分类器

目录 分类器任务和数据介绍训练分类器的步骤在GPU上训练模型 分类器任务和数据介绍 训练分类器的步骤 #1 import torch import torchvision import torchvision.transforms as transformstransformtransforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.…

SpringCloud学习路线(8)—— Docker

一、Docker的开始 &#xff08;一&#xff09;项目部署问题&#xff1a; 依赖关系复杂&#xff0c;容易出现兼容性问题开发、测试、生产环境有差异 &#xff08;二&#xff09;Docker如何解决问题&#xff1f; 1、依赖兼容问题 &#xff08;1&#xff09;将应用的Libs&…