初识数据可视化之matplotlib(搭建一个稳健的matplotlib绘图平台)
初识数据可视化之matplotlib(搭建一个稳健的matplotlib绘图平台)如果你对上面的关于分辨率和图像尺寸的关系不是很清楚,请重新阅读第4,第5篇文章。mpl默认的figsize是(6 4)。他的代码并没有设置"figsize",但生成的图像尺寸是(40 30) 英寸,这个尺寸太大了,显然是在哪里修改了rcParams参数,导致了他的苦恼。完全正确,分辨率就是预期的600dpi。我让把他看到的图像属性截图给我看看,如下:按照这个属性参数,很容易计算出,他电脑上的这张cm.jpeg图像的物理尺寸是:
搭建一个和我的一样的、稳健的matplotlib绘图平台。
网上这一类的交流、总结文章已经很多,我为什么还要专文来说这个事呢?你可能会说:不就是安装Python、配置Python环境变量、安装matplotlib及其依赖包吗?
从一个小故事看matplotlib平台稳健性前些天,有一位网友求救,说他在matplotlib中绘图,需要将图像分辨率设置为 600dpi,但不管怎么操作就是没有效果,他在图像属性中看到的图片DPI始终只有96dpi
%matplotlib inline import numpy as np import matplotlib import matplotlib.pyplot as plt # sphinx_gallery_thumbnail_number = 2 # 蔬菜种类 vegetables = ["cucumber" "tomato" "lettuce" "asparagus" "potato" "wheat" "barley"] # 农夫名字 farmers = ["Farmer Joe" "Upland Bros." "Smith Gardening" "Agrifun" "Organiculture" "BioGoods Ltd." "Cornylee Corp."] # 收成 harvest = np.array([[0.8 2.4 2.5 3.9 0.0 4.0 0.0] [2.4 0.0 4.0 1.0 2.7 0.0 0.0] [1.1 2.4 0.8 4.3 1.9 4.4 0.0] [0.6 0.0 0.3 0.0 3.1 0.0 0.0] [0.7 1.7 0.6 2.6 2.2 6.2 0.0] [1.3 1.2 0.0 0.0 0.0 3.2 5.1] [0.1 2.0 0.0 1.4 0.0 1.9 6.3]]) # fig ax = plt.subplots() fig = plt.figure(dpi=600) ax = fig.add_subplot(1 1 1) im = ax.imshow(harvest) # 设置x,y坐标长度 ax.set_xticks(np.arange(len(farmers))) ax.set_yticks(np.arange(len(vegetables))) # x,y具体标签 ax.set_xticklabels(farmers) ax.set_yticklabels(vegetables) # x轴标签旋转45°显示 plt.setp(ax.get_xticklabels() rotation=45 ha="right" rotation_mode="anchor") # 显示每个方格的值 for i in range(len(vegetables)): for j in range(len(farmers)): text = ax.text(j i harvest[i j] ha="center" va="center" color="w") ax.set_title("Harvest of local farmers (in tons/year)") fig.tight_layout() plt.savefig("cm.jpeg" dpi = 600) plt.show()
他把代码发了过来,似乎没有什么问题。我在jupyter lab中运行这段代码,生成"cm.jpeg"文件,在PS中查看图像尺寸:
完全正确,分辨率就是预期的600dpi。
我让把他看到的图像属性截图给我看看,如下:
按照这个属性参数,很容易计算出,他电脑上的这张cm.jpeg图像的物理尺寸是:
- 宽度 = 40英寸;
- 高度 = 30英寸。
mpl默认的figsize是(6 4)。他的代码并没有设置"figsize",但生成的图像尺寸是(40 30) 英寸,这个尺寸太大了,显然是在哪里修改了rcParams参数,导致了他的苦恼。
如果你对上面的关于分辨率和图像尺寸的关系不是很清楚,请重新阅读第4,第5篇文章。
由于Python的开源性,各种开发包又很多,包之间的依赖性极其复杂,所以你的每一个操作都有可能影响整个开发平台的稳定性,甚至引发灾难性后果。
比如:
- 你在代码中无意中修改了某个包的默认参数,再也得不到预期的结果;
- 你升级了某个包,但其它依赖于它的包还没有对应的升级包(你没有升级,或者没有可用的升级包),导致其它包运行出错;
- 等等....
所以,搭建一个稳健的Python平台非常重要。像你我这样通过网络交流,双方保持测试环境的尽可能一致也是非常有好处的。
推荐的Python平台搭建方式搭建Python平台,目前从大方面来说,常见的主要有两种方式:
- 直接安装Python,使用pip安装和管理平台,需要用哪个包再安装它;
- 通过安装Anaconda,一次性安装常用的库,使用conda安装和管理平台。
第1种方式适合非常专业的人员,要求对Pyhton的包管理非常熟练,对包的依赖性有较深的了解,并且有很强的解决遇到的各种问题的能力。
像我这样的草根推荐第2种方式。
Anaconda是什么,有什么优势?Anaconda是以Python为核心,针对科学计算和机器学习而构建的一个集成环境。
它以一个整洁的包装给了我们使用Python所需的一切,让我们可以专注于使用工具而不是维护它们。
- 首先,它在一个包装中集成了Python科学计算和机器学习常用的库;
- 其次,它使用conda安装和管理环境,在下载、安装、更新包时会自动分析你的系统和当前环境,并自动处理包之间的依赖关系;
- 第三,它还提供一个导航器,让我这样的草根可以在图形窗口管理环境;
- 第四,它还提供了spyder prompt等附加工具,作为官方的IDE和Shell命令工具。
一句话,它的优势在于集成了我们使用Python的主要工具。
建议你按照下面的步骤从头搭建一个稳健的Python开发平台,这样你的测试环境和我的就基本一致了,各种代码的测试结果也就会基本一致,也会避免出现莫名的问题。
下载,安装Anaconda登录anaconda官网 https://www.anaconda.com/distribution/#download-section
下载相应的版本,我的操作系统是windows 10 64bit 的。
强烈建议下载 Python 3.7 版的,Python2 即将被放弃。
如果你过去一直使用Python 2 ,也不要担心,转到Python 3 真的很容易,并且从长远看是必须的,也是值得的。
像安装其它windows程序一样,双击运行安装,一路next,在指定安装路径时,建议设置如下:
其它都是默认设置即可。
安装结束后,程序菜单中会有一个Anaconda3文件夹。
需要进行两次配置,第一次:
如下图,打开系统环境变量设置窗口:
双击 PATH
打开下面的窗口:
- 新建;
- 浏览;
- 找到左边三个路径
依次重复操作,即可将Anaconda的环境变量添加到系统中。
添加图中左侧的三个路径到环境变量中
测试Python和conda是否安装配置成功打开Anaconda Prompt命令行窗口:
输入命令 : python,返回如下内容:
表示Python安装配置成功,我的Python版本是3.7.3.
输入命令:conda,返回如下内容:
表示 conda 管理工具安装配置成功。
创建工作虚拟环境强烈建议:在上面的安装测试完成后,先创建一个工作虚拟环境。再开始你的探索之旅!
为什么要工作创建虚拟环境?前面说过,因为Python的开源性,包的依赖性复杂,在使用过程中,随时都会破坏整个 Python 环境,导致出现一些莫名的问题和错误。
前面的安装过程会创建一个base环境,如果直接在这个环境下工作、学习、测试,当系统中的python环境出现问题无法修复时,就不得不卸载Anaconda,再重新安装它。
如果我们创建一个新环境,工作、测试、学习都在这个环境下进行,当出现问题时,我们只需要删除这个环境,再重新创建一个环境即可,这比从头安装Anaconda要节省时间。
当然虚拟环境还有其它一些用途,不在我们的讨论范围内。
创建工作虚拟环境启动 Anaconda Prompt 运行如下命令:
conda create -n py373env python=3.7
创建一个名为 "py373env", Python版本为3.7的虚拟环境。
当然,环境的名称你可以根据喜好定,我习惯于这样命名,一看就知道,这是一个Python的虚拟环境,并且Python版本是3.7.3。
需要一定的时间,它会下载、安装一些包,创建你指定的环境,创建完成后。
在Anaconda Prompt中输入:
conda activate py373env
激活‘py373env’环境。
可以发现命令行的引导符最右边的括号中原来的base,变成了py373env,这就表示,你原来处在base环境中,现在转到了py373env环境中。
你在哪个环境中的操作,主要影响这个环境。比如更新、安装包,修改一些包的默认参数,只会影响该环境下的包,不会影响base环境。
将虚拟环境也添加到系统环境变量中我习惯于在jupyter lab中工作、学习、测试Python代码,数据分析、数据可视化。
每天打开 Anaconda Prompt,输入的第一行命令就是:
conda activate py373env
即,立即转到我的 py373env 虚拟环境,确保我的操作都是在这个环境下。除非我非常清楚地知道我要在其它环境下工作,我才退出py373env环境,激活其它环境。
退出py373env环境,使用命令:
conda deactivate
jupyter lab是jupyte notebook的替代计划。
jupyter提供了在web中输入、保存、运行代码,显示结果.....的强大功能。
它集交互模式、IDE模式的优点于一身。
是我测试Python代码、进行数据分析、matplotlib数据可视化的主要战场。
下面将以在py373env虚拟环境中安装、配置jupyter lab为例介绍 Anaconda的包安装和管理。
设置conda的下载镜像源(即下载通道)Anaconda的官方下载通道是 conda-forge
有时会出现下载失败,下载速度慢的问题,可以添加清华大学的镜像服务器。
在"系统盘(c)-用户---用户名"目录下有一个Anaconda的配置文件文件:.condarc
用记事本打开这个".condarc"文件,删除里面的内容,将下面的内容复制进去,保存即可。
channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ - conda-forge show_channel_urls: true ssl_verify: true 安装jupyter lab
激活虚拟环境:
conda activate py373env
在py373env环境下,执行命令:
conda install -c conda-forge jupyterlab
conda会自动分析你的环境,找到合适jupyterlab版本和包,下载安装它们。
命令中的 "-c conda-forge"是指定从anaconda的官方镜像下载安装,这是推荐的方式。如果因网络的问题,直接使用:
conda install jupyterlab
它会根据分析结果和网速选择配置文件中列出的镜像源中合适的通道下载镜像。
安装完成后,在py373env环境下,输入:
jupyter lab
即可启动jupyter lab。
jupyterlab有很多扩展插件可用。安装合适的插件,能够使你的效率提高很多。
JupyterLab 的插件是 npm 安装包。所以按照 JupyterLab 的插件,需要提前安装好 Node.js。
安装命令:
conda install -c conda-forge nodejs
完成之后,有两种方式进行插件的安装:
- 通过开启 Extension Manager 来安装和管理插件
- 通过执行命令的方式安装。 限于篇幅就不讲了。
如果使用第一种方式,需要手动开启 Extension Manager。
在jupytelab页面,设置,高级设置 (command 逗号 ),选择Extension Manager一栏,修改设置为 true:
这样就可以使用Extension Manager来安装jupyterlab的扩展插件了。
可以搜索插件,安装插件,对已安装的插件启用、禁用、卸载。
安装好jupyter toc 目录插件,就可以使用目录在文档中导航了。
是不是看起来还不错?
一个稳健的Python,matplotlib平台搭建好了,后面就让我们在这个平台上炼身手吧!
因为是草根们的草堂,所以可能有点太细了!但这会是我坚持的风格,尽可能让各等级的草根都能看懂。
关注“Python草堂”,轻松阅读下一篇:Python数据可视化百花丛中你应该折哪朵?
你的赞和建议,甚至批评都是我前进的动力!