本文将讲解如何在Lighthouse等云服务器上通过display、Python、Matplotlib等工具查看和绘制各类图表。

背景概述

工程师小王最近在折腾些性能统计分析的工作,所有的数据记录都在云服务器端,他很好奇如何在服务器端画图表并且方便地实时查看呢?对于这类需求任务,最方便的做法就是在云服务器上用Matpotlib等绘图工具搞定了,本地不需要任何软件,仅用SSH客户端登录即可。

那么,让我们首先在腾讯云创建一台可以把玩的云服务器吧!

(当然,如果你已经有了一台可以远程登录并使用的云服务器,可以选择跳过下一节,直接开始“SSH X11连接”部分。)

服务器准备

服务器准备,当然还是选用咱们的主角:腾讯云轻量应用服务器(Lighthouse)。当然你可以用CVM(云服务器)产品等,也是完全可以的。Lighthouse实例是当下最流行最方便的创建云主机方式,小实验用起来最爽快。

购买机器

下图是Lighthouse的创建页面,到这里选择一款喜欢的吧->

这里我们创建一台香港地域的镜像为Ubuntu 20.04LTS版本的实例,这是Ubuntu最新的LTS(长期维护)版本,可以体验更多新特性,后续我们也会在这个系统上做些简单实验。套餐选择上,可以根据自己的需求选择,本教程以4核的套餐举例。可以感到相当清简的购买流程,需要输入实例名称并选择下时长即可,购买体验非常流畅。

我们创建完成后,可以在实例列表页面看到实例状态,当实例状态为 运行中 时,点击 更多->管理 即可进入管理页面了。我们将在管理页面为我们的Lighthouse主机重置密码,以方便后续的SSH登录。

重置密码

Lighthouse实例默认仅能从腾讯云控制台免密登录(本质是使用了默认密钥),为了可以后续通过SSH命令进行代理访问,最方便的方法是通过密码登录。

我们需要为我们的实例重置密码,可以在控制台的实例详情页面完成此类操作。

我们通过“指定用户名”更新lighthouse用户的密码,即可。

注意:此步骤需要重启实例。然后即可通过SSH客户端软件验证密码登录了。

另外:这里也完全可以选择为其他(已创建的)用户更新密码。

SSH X11连接

相信大家都会使用SSH客户端连接Linux远程主机,然后通过命令行CLI——通常是shell——来与主机进行交互。但是如果想执行那些安装在远端Linux主机上的图形用户界面(也叫GUI,Graphical User Interface)的程序,比如GVim/PyCharm编辑器、Firefox浏览器等应用程序,那该怎么办呢?

这时候就需要通过SSH的 X11 forwarding 的功能来实现了。通过X11 forwarding,可以以将运行在远端主机上的应用程序的窗口屏幕转发至本地主机上,进而可以方便本地直接使用远程主机上的GUI应用程序。远端的主机甚至根本无需安装X server或任何图形化的桌面系统(如Gnome/KDE等)。

建立支持X11 Fowarding的SSH连接

在SSH会话中实现X11 Forwarding需要SSH的服务器端和客户端都支持,目前较新发行版的系统SSH服务器端配置都是默认支持的。所以,我们在建立SSH会话连接时,只需通过增加 -X 参数,就可以方便地启用SSH的X11 Forwarding功能,具体命令如下所示:

ssh -X lighthouse@YOUR-HOST-IP

什么是X11?X11 其实是 X Window
System的简称,是类Unix、现代Linux系统上支持窗口化显示的框架及服务。X11起源于1984年,前身是MIT的Athena项目,它采用Client/Server架构,使得用户可以仅仅通过网络终端即可使用各种输入(如键盘/鼠标)输出(如显示器)设备来访问使用主机上的GUI程序。在现代Linux系统中,X server服务为系统提供相对底层的图形用户界面的支持,很多Linux桌面窗口系统也都建立在X11之上。

注意:以上命令在Linux发行版(如Ubuntu/Fedora/Mint等)的桌面下可以直接运行。但如果是非Linux桌面系统,需要安装对应的支持运行本地X服务的X11工具。

如果你是MacOS用户,只需安装XQuartz软件即可,连接时通过默认terminal或iTerm等终端工具都没问题。

对于Windows用户,如果你用PuTTY工具登录云服务器,推荐安装X410软件,它可以无缝搭配PuTTY,记得在勾选上Connection->SSH->X11->X11 forwarding,如图:

查看远端Linux主机上的图片

安装graphicsmagick软件包,里面包含各类图片处理相关的库以及我们后续需要的display命令。

sudo apt install graphicsmagick-imagemagick-compat
display

执行 display 命令后,我们可以看到本地主机会弹出一个新窗口,展示了GraphicsMagick的默认图片,X11 Forwarding成功。

diplay 命令是GraphicsMagick的“前端工具”,它不仅能浏览图片,还能修改图片,如放大缩小、旋转剪裁、甚至添加模糊/锐化等效果,本文不过多详细介绍。当然我们可以用display命令查看指定的图片,如:

display my-demo-image.png

如果SSH连接时,忘记指定 -X 参数的话,运行 display 命令时会报类似地错误,它通常意味着X11 Forwarding没有打开。

lighthouse@VM-0-11-ubuntu:~$ display
display display: Unable to open X server ().

运行其他GUI程序

当然,只要服务器性能以及网络带宽足够,甚至还可以打开远端服务器上的GVim、Firefox、Visual Studio Code、PyCharm等多种桌面应用。

上图中可以看到,已打开的gvim和firefox是运行在远程服务器上的GUI应用,(实验的本地主机是没有这两个应用程序的)只是通过SSH X11转发将程序窗口显示转到本地。这就是 X11 Forwarding 功能的强大之处,体验下吧。下面我们准备开始绘图的工作!

安装Matplotlib

Matplotlib简介

Matplotlib,是用于绘制各种图表(包括静态图、动图、甚至交互图)的Python库。Matplotlib当前已经到v3版本,是Python社区最流行的绘图工具,因其简单的接口使用以及愈发丰富活跃的社区,已被广泛地应用于各类科研教学、工程实验实践、项目分析等各类涉及数据分析的实用场景。比较常用的折线图、条形图、直方图、散点图,函数曲线图、饼图甚至3D图都可以用它来绘制。Matplotlib最开始诞生于2012年,并开源(BSD协议),支持Python2和Python3。Numpy、Scipy等多个主流的数值计算库都与其关系紧密。目前Matplotlib可谓Python社区中数据可视化工具的集大成者。下面是其官网截图(部分):


Matplotlib安装

Matplotlib当前的最新release版是v3.3.2版本(如上图所示),Lighthouse的Ubuntu 20.04LTS下,pip可以直接安装该最新版本。通过pip安装两部即可:

# 安装python3的pip
sudo apt install python3-pip
# 安装matplotlib
pip3 install matplotlib

Matplotlib 安装验证

python3 -c "import matplotlib; print(matplotlib.__version__)"
#会输出显示matplotlib的版本号,即安装成功
$ 3.3.2

Matplotlib示例——数据统计图

本节介绍下最常用的统计图类的绘制示例。统计图常用于各类数据报表的展示与记录,常见的形式有折线图、直方图、散点图等。通过matplotlib,我们可以通过很简单的近乎声明式的脚本定义图表的各类元素,并把它存储为指定的文件格式。代码如下:

import matplotlib.pyplot as plt
​
plt.title('HTTP Performance Benchmark')
plt.xlabel('Connection (users)')
plt.ylabel('Throughput (requests/second)')
​
plt.axis([0, 2200, 0, 25000])
​
plt.plot([100, 500, 1000, 1500, 2000],[21413, 20905, 18679, 17704, 17403],color='r', marker='d', linestyle='-',label='Rust v1.28.0'
)
​
plt.plot([100, 500, 1000, 1500, 2000],[16930, 16532, 16289, 15856, 15563],color='b', marker='h', linestyle='-',label='Go v1.11.1'
)
​
plt.plot([100, 500, 1000, 1500, 2000],[14845, 14647, 13878, 13389, 13133],color='g', marker='v', linestyle='-',label='Node.js v8.11.4'
)
​
plt.plot([100, 500, 1000, 1500, 2000],[5942, 5392, 4461, 4239, 3678],color='y', marker='o', linestyle='-',label='Python v3.5.2'
)
​
plt.legend()plt.savefig('perf.svg')

代码相信不难理解,matplotlib设计的接口都非常直接:比如 title() 、 xlabel() 就是直接定义图上相关元素;savefig() 就是存储文件,注意可以指定文件格式(如svg,png)等。plot() 方法就是定义绘制一系列点,第一个参数是x轴序列值,第二个参数是y轴序列值。coler(色彩)、marker(点型)、linestyle(线型)等样式相关的定义也可以在此设置,详见文档详细介绍,在此不赘述。

脚本编写完毕后,python3 直接运行脚本即可,运行后会在当前目录生成perf.svg(代码中定义的)文件,通过 display 命令显示的该折线图,如下:

Matplotlib示例——多函数曲线

除了已有数据的统计图,我们还可用Matplotlib绘制函数曲线图,并且同时绘制多个曲线。不同于上一节的场景,这类图的y轴数值是通过x数值动态计算出来的,而非一开始就明确。常用于数学分析、物理工程领域的建模研究。本节我们选择基本的简谐振动曲线,以方便讲解,示例代码如下:

import numpy as np
import matplotlib.pyplot as plt
​
# Data for plotting
x1 = np.linspace(0.0, np.pi)
x2 = np.linspace(0.0, np.pi)
x3 = np.linspace(0.0, np.pi)
y1 = np.cos(2 * np.pi * x1 - np.pi)
y2 = np.cos(2 * np.pi * x2)
y3 = np.cos(2 * np.pi * x3) * np.exp(-x3)
​
# Create 3 subplots sharing y axis
fig, (ax1, ax2, ax3) = plt.subplots(3, sharey=True)
​
ax1.plot(x1, y1, 'b.-')
ax1.set(title='exapmple of 3 subplots', xlabel='time (s)', ylabel='Undamped')
​
ax2.plot(x2, y2, 'g.-')
ax2.set(xlabel='time (s)', ylabel='Undamped')
​
ax3.plot(x3, y3, 'ko-')
ax3.set(xlabel='time (s)', ylabel='Damped oscillation')
​
plt.show()

我们导入了numpy数值计算库,用于后续的一些函数/常量引用。numpy库和matplotlib一起使用是非常自然的。x轴变量通过 linspace() 设置定义域区间,y轴即函数定义。通过 subplots() 定义图表(即Figure),每个Figure可以包括多个子图(subplot),在定义时可以通过第一个参数指定子图的数量。这里我们用绘制3个图然后分别执行 plot() 方法。并且我们的三个子图对齐y轴(通过 sharey 参数),且x轴定义域相同,可以更加直观地比较不同初相位和阻尼所带来地影响,程序运行后,会直接弹出绘图窗口,显示绘制结果:

注意,我们没有用 savefig() 保存图片文件,而用了 show() 方法直接最后显示,更方便调试。若要结束程序,关闭窗口或 Ctrl+C 均可。

小结

相信看到这里,你已经对在Lighthouse云服务器上如何用Python/Matplotlib等工具绘图有了基本的认识和掌握,是不是感觉蛮有意思的呢?

其实Matplotlib功能非常强大,还有对散点图、热度图、3D图等多种支持,甚至还可以保存绘制过程为动图/视频,更加直观的显示数据之间的关系。后续我们在相关应用场景下还会再进一步介绍,敬请持续关注本专栏。

当然最重要的,还是多在Lighthouse等云服务器产品中大胆尝试体验它,收获更多探求和学习的乐趣!玩得愉快~

参考资料

  • 腾讯云轻量级应用服务器
  • 腾讯云云服务器产品
  • X Window Server
  • X.org wiki
  • matplotlib用户手册
  • subplots_demo

【Lighthouse教程】Python绘制图表相关推荐

  1. 用python绘制柱状图标题-使用Python绘制图表大全总结

    在使用Python绘制图表前,我们需要先安装两个库文件numpy和matplotlib. Numpy是Python开源的数值计算扩展,可用来存储和处理大型矩阵,比Python自身数据结构要高效:mat ...

  2. python能绘制统计图吗-使用Python绘制图表大全总结

    在使用Python绘制图表前,我们需要先安装两个库文件numpy和matplotlib. Numpy是Python开源的数值计算扩展,可用来存储和处理大型矩阵,比Python自身数据结构要高效:mat ...

  3. python图表_使用Python绘制图表大全总结

    在使用Python绘制图表前,我们需要先安装两个库文件numpy和matplotlib. Numpy是Python开源的数值计算扩展,可用来存储和处理大型矩阵,比Python自身数据结构要高效:mat ...

  4. python简单代码画曲线图教程-Python绘制折线图和散点图的详细方法介绍(代码示例)...

    本篇文章给大家带来的内容是关于Python绘制折线图和散点图的详细方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.绘制折线图和散点图要用到matplotlib ...

  5. python 绘制柱状图-「Python」python绘制图表

    介绍一种简单而又功能强大的绘制图形或报表的包-pyecharts,一个基于Echarts(基于JS的数据可视化库)的图标类库,除了绘制常见的折线图.柱状图.饼图.箱型图和散点图外,还可以绘制3D柱状图 ...

  6. python画图表的库_「Python」python绘制图表

    介绍一种简单而又功能强大的绘制图形或报表的包-pyecharts,一个基于Echarts(基于JS的数据可视化库)的图标类库,除了绘制常见的折线图.柱状图.饼图.箱型图和散点图外,还可以绘制3D柱状图 ...

  7. python 绘制图表生成svg文件_python用Pygal如何生成漂亮的SVG图像详解

    前言 SVG可以算是目前最最火热的图像文件格式了,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形.它是基于XML(Extensible Markup Langu ...

  8. Python:使用matplotlib绘制图表

    今天看了一下使用python绘制图表的方法,有个强大的类库matplotlib,可以制作出高质量的2D和3D图形,先记录一下,以后慢慢学习. matplotlib下载及API手册地址:http://s ...

  9. Python: 使用 matplotlib 绘制图表

    今天看了一下使用python绘制图表的方法,有个强大的类库matplotlib,可以制作出高质量的2D和3D图形,先记录一下,以后慢慢学习. matplotlib下载及API手册地址:http://s ...

最新文章

  1. 使用JAVA代码实现Android布局(一)RelativeLayout
  2. 《疯狂Java讲义》学习笔记(十)异常处理
  3. JGG:遗传发育所白洋组和曹晓风组-水稻组蛋白甲基化调控根系核心菌群
  4. SQLServer代理新建或者编辑作业报错
  5. python下载大文件-使用python通过FTP下载大文件
  6. 【数字信号处理】傅里叶变换性质 ( 傅里叶变换频移性质示例 )
  7. Pytyon3中实现十进制转不同进制
  8. java 面试指南_Java面试参考指南–第1部分
  9. MEF实现设计上的“松耦合”(一)
  10. sort函数_Python排序之sortamp;sorted
  11. Java把日期转为周几
  12. 代码审查工具Sonar下载、安装、使用
  13. 2019年互联网企业软件测试面试题(常考)
  14. matlab 收敛速度,BP网络的收敛速度和设计步骤【转】
  15. 不知道如何压缩PDF?教你3个压缩PDF文件方法
  16. Aquarius 水瓶
  17. 80C51单片机指令寻址方式
  18. 输油管道问题(分治法)
  19. 快手市值万亿、炒股如同炒币,资本市场正在币圈化?
  20. 当当网——(第一次上课的作业)(HTML)

热门文章

  1. autoit pro
  2. 网站快照被劫持 标题描述被篡改成灰色内容的解决方法
  3. LWN:NVIDIA 与 nouveau!
  4. Windows批处理:命令if
  5. 通过HuTool工具类和oshi查询cpu使用率、内存大小、磁盘空间等
  6. 记解决pycharm报错 Process finished with exit code -1073741819 (0xC0000005)
  7. 删除chrome中特定的搜索记录
  8. Linux——信号量(定义、示例、信号量接口、ipcs命令)
  9. 报错 | {errMsg: “chooseWXPay:fail, the permission value is offline verifying“}errMsg: “chooseWXPay
  10. 杭州小厂一面面经(Java实习)