利用python的matplotlib绘制分布图

时间:2022-12-14 04:09:05

一、目标

      以csv文件中的Kshell列值为Y轴,Degree列值为Y轴,分别以Upper列、EquUpper列、EquLower列,Lower列这四列的值为第三维,在对应的X、Y坐标上以颜色的深浅表示值的大小,得到四个结果。部分文件格式如下:

利用python的matplotlib绘制分布图

达到效果:

利用python的matplotlib绘制分布图 利用python的matplotlib绘制分布图
利用python的matplotlib绘制分布图 利用python的matplotlib绘制分布图


二、实现步骤

1、环境配置

      在环境配置上花费了很长时间,主要是在PyDev中使用matplotlib包中的cm时,无法识别它的属性,解决方法:

(1)jdk、python、matplotlib等有32位、64位区分的,统一使用相同的位数版本。这里使用的64位,Python为2.7,这里使用的python安装包和模块安装包下载地址http://download.csdn.net/detail/suncherrydream/9840726

          首先安装Python,直接下一步即可,这里安装路径为C:\Python27

          接下来安装其他模块,首先确定这些模块放置的位置,这里放在了C:\Python27\Scripts下(不用非放在这里,只是举个例子)

          然后利用Python自带的pip进行安装,如果没有为安装的python配置环境变量,需要在命令行环境下,先进入C:\Python27\Scripts目录下,然后输入pip install 包文件名进行安装,第一次使用时可能提示有更新的pip版本,将提示内容输入命令行即可。如下图所示:

利用python的matplotlib绘制分布图

(2)在Eclips中使用PyDev,并设置解释器(interpreter)为刚刚安装的python

          方法参照  http://blog.csdn.net/yanzi1225627/article/details/19575437

          安装完成并添加完解释器后即可以创建自己的python项目,创建时候选择PyDev Project,下一步时候可以选择已经添加的解释器,因为你可能同时安装了python2.7和python35,并将两个版本的解释器都添加到了PyDev中,这样可以通过这里来设置你希望使用哪个版本的Python解释器来解析你的代码

利用python的matplotlib绘制分布图利用python的matplotlib绘制分布图                  


创建项目完成后,即可创建自己的包(pacakge),并在包下创建自己的模块(也可以不创建包)

利用python的matplotlib绘制分布图


(2)在完成上面的环境搭建工作后,在新创建的模块中输入下面语句的时候,

from matplotlib import cm

cmap=cm.Blues

在第二行依然提示Undefined variable from import,,即无法识别cm后面的Blues,做法如下图所示,强加了matplotlib,至此我的问题得到了解决

          

利用python的matplotlib绘制分布图


2、代码实现

(1)读取数据到内存中,每列放在一个数组中,几个数组中相同下标对应数据是csv文件中同一行的数据。实现方法为readData()

(2)获取X轴和Y轴刻度数组大小,这里让kshell列为Y轴,degree为X轴,数组的长度与对应轴的最大值相同,以kshell为例,kshell列中的最大值为8,则kshell对应轴的刻度数组为[1,2,3,4,5,6,7,8](此不没有生成数组,仅得到数组大小,生成数组在第(4)步中完成)。实现方法为getSize(),返回两个值,分别表示degree列的最大值,kshell列的最大值max_degree, max_kshell

(3)根据前面读取的数据生成z轴数据,实际上开始展现的就是三维数据的结果,无非将Z轴去掉,Z轴对应值在X轴、Y轴对应的位置上用颜色的深浅表示,实现方法为generateZ(max_degree, max_kshell),返回结果为z_upper_values, z_eu_values, z_el_values, z_lower_values,这四个结果均为二位数组,如z_upper_values[1][2]的值为value表示对于upper数据,在坐标x=2,y=1的位置的值为value。

(4)根据上面获取的x轴y轴刻度数组大小生成对应的数组,值得注意的是对于Y轴,数组中下标为0的值将会放在Y轴的最顶端,所以如果想按我们正常的随着Y轴正向值变大,需要将Y轴对应的数组按照倒序存放

        

(5)绘制并保存结果,实现方法为draw_heatmap(data0, xlabels, ylabels, savepath, titleStr),参数以为(3)中获得的z轴数据对应的二维数组,xlabels,ylabels分别为(4)中获得的X轴和Y轴数组,savepath为将得到的结果保存的位置,titleStr是为坐标系设置的含义。

完整实现代码如下:


参考文章地址: matplotlib
包下载地址

Python绘制热图

Python中的Numpy、SciPy、MatPlotLib安装与配置Undefined variable from import的解决方案
matplotlib绘图实例:pyplot、pylab模块及作图参数 Python之路—matplotlib与云图 使用matplotlib的示例:调整字体-设置刻度、坐标、colormap和colorbar等 [python数据自动化处理]python 用 matplotlib画图时设定x/y轴坐标主刻度及次要刻度的方法 python matplotlib绘图设置坐标轴刻度、文本
使用python中的matplotlib进行绘图分析数据 python中创建指定大小的多维数组 python的二维数组操作 Configure Interpreter Python格式化字符串 Heatmaps in Python python给scatter设置颜色渐变条colorbar