云开发是当今最有前途的开发。不过在云开发的过程中,一些技术和技巧的使用和传统开发还是有些不同的,这篇主要给大家介绍一些最新的小技巧,可以有效提高大家的工作效率和质量哦,记得收藏~
当我们在做统计分析工作时,会将所有数据记录在云服务器端,那么如何在服务器端画图表并实时查看呢?
最快捷的方法就是在云服务器上使用Matpotlib等绘图工具,而不需要在本地下载任何软件,使用SSH客户端登陆就可以了。
首先,需要在腾讯云创建一台云服务器。
步骤一:服务器准备
服务器准备,依然还是选用腾讯云轻量应用服务器(Lighthouse)。也可以使用CVM(云服务器)产品等。Lighthouse是当前最流行最方便的创建云主机方式,小实验用起来最快捷。
- 购买机器
下面是Lighthouse的创建页面,可以选择一款自己喜欢的。
首先创建一台香港地域的镜像为Ubuntu 20.04LTS版本的实例,这是Ubuntu最新的LTS(长期维护)版本,可以体验更多新特性,后续我们也会在这个系统上做些简单实验。
选择套餐时,可以根据自己的需求进行选择,本教程是以4核的套餐为例。具有相当清简的购买流程,仅仅输入实例名称并选择下时长即可,购买体验极为流畅。
创建完成后,在实例列表页面可以查看看实例状态,当实例状态显示为运行中时,点击更多->管理,就可进入管理页面了。在管理页面,将Lighthouse主机重新设置密码,以方便后续的SSH登录。
2.重置密码
Lighthouse默认只能通过腾讯云控制台免密登录(本质是使用了默认密钥),为了可以在后续通过SSH命令进行代理访问,最方便的方法是通过密码登录。
那么我们就需要为Lighthouse重置密码,这类操作在控制台的实例详情页面完成。
我们可以通过“指定用户名”更新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,如图:
2.查看远端Linux主机上的图片
安装GraphicsMagick软件包,里面包含各类图片处理相关的库以及我们后续需要的display命令。
1-sudo apt install graphicsmagick-imagemagick-compat
2-Display
执行display命令后,可以看到本地主机会弹出一个新窗口,展示了GraphicsMagick的默认图片,X11 Forwarding成功。
diplay命令是GraphicsMagick的“前端工具”,它不仅能浏览图片,还能修改图片,如放大缩小、旋转剪裁、甚至添加模糊/锐化等效果,本文不过多详细介绍。当然我们可以用display命令查看指定的图片,如:
1-display my-demo-image.png
如果SSH连接时,忘记指定-X参数的话,运行display命令时会报类似地错误,这通常意味着X11 Forwarding没有打开。
1-lighthouse@VM-0-11-ubuntu:~$ display
2-display display: Unable to open X server ().
3.运行其他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安装两部即可:
1-# 安装python3的pip
2-sudo apt install python3-pip
3-# 安装matplotlib
4-pip3 install matplotlib
2.安装验证Matplotlib
1-python3 -c "import matplotlib; print(matplotlib.__version__)"
2-# 会输出显示matplotlib的版本号,即安装成功
3-$ 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均可。
总结
Matplotlib功能非常强大,对散点图、热度图、3D图等都可以支持,甚至还可以将绘制过程保存为动图/视频,更加直观的显示数据之间的关系。
参考资料
- 腾讯云轻量级应用服务器
- 腾讯云云服务器产品
- X Window Server
- X.org wiki
- matplotlib用户手册
- subplots_demo
本文参考来源:溪歪歪
如若转载,请注明出处:https://www.hanjifoods.com/1210.html