Python可视化
此笔记记载通过使用python matplotlib等数据可视化工具的方法。
Python matplotlib
marplotlib的总体概念
最大的概念是figure,每个figure可以有多个axes,每个axes有两个或者三个(3D)axis,可以通过以下代码进行创建:
|
|
subplots()返回Axes对象的数组,每个axes都是一个单独的子图,可以通过axes.Axes.set_xlim()和axes.Axes.set_ylim()方法控制x轴和y轴的长度,同时可以通过set_xlabel()和set_ylabel()来设置两个轴的标题,通过legend()方法显示该axes的图注。通过set_title()设置axes的大标题。注意,plot()函数的输入必须是numpy的array类型。
建议通过以下的格式来抽象出一个绘图函数:
|
|
plot函数的使用
一般是:
|
|
后面的参数有以下:
| 参数名 | 描述 |
|---|---|
| color | color颜色 |
| linestyle | 线形,{'-','–','-.',':'} |
| linewidth | 线的宽度,float |
| marker | 点的标记,具体见下 |
可以通过format string控制,format string的格式为
|
|
点的标记有以下格式
| character | description |
|---|---|
| ‘.’ | point marker |
| ‘,’ | pixel marker |
| ‘o’ | circle marker |
| ‘v’ | triangle_down marker |
| ‘^’ | triangle_up marker |
| ‘<’ | triangle_left marker |
| ‘>’ | triangle_right marker |
| ‘1’ | tri_down marker |
| ‘2’ | tri_up marker |
| ‘3’ | tri_left marker |
| ‘4’ | tri_right marker |
| ’s' | square marker |
| ‘p’ | pentagon marker |
| ‘*’ | star marker |
| ‘h’ | hexagon1 marker |
| ‘H’ | hexagon2 marker |
| ‘+’ | plus marker |
| ‘x’ | x marker |
| ‘D’ | diamond marker |
| ’d' | thin_diamond marker |
| ‘|’ | vline marker |
| ‘-’ | hline marker |
颜色的分类有以下:
| character | color |
|---|---|
| ‘b’ | blue |
| ‘g’ | green |
| ‘r’ | red |
| ‘c’ | cyan |
| ’m' | magenta |
| ‘y’ | yellow |
| ‘k’ | black |
| ‘w’ | white |
如果format string 只设定了 颜色,可以使用16进制串如‘#008000’.
分层设色地形图/等高线图相关
需要用到的函数
|
|
X,Y都是坐标,Z是高度,levels是高度的分级(必须是递增)重要参数有:
- colors : 指定每个level的颜色,如果是contour则指定了线的颜色,如果是contourf则指定了色块的颜色
- extend : 取值有{‘neither’, ‘both’, ‘min’, ‘max’}, 这个指定了超出等级范围的色块的显示,如果设置neither,超出范围都是空白,如果选min则对低于最低level的有效,如果选max则对高于最高level的有效,选both对所有范围都有效,一般选both。可以通过cmap的set_over()和set_under()来设定超过上限和下限的颜色,更换颜色以后需要使用cs.changed()来调整(注:cs是contour或者contourf的返回,是QuadContourSet类型,大概是代表了所有等高线的一个集合set)
- linewidths: 线的宽度,只适用于contour
- linestyles:线的类型,可选的值有{None, ‘solid’, ‘dashed’, ‘dashdot’, ‘dotted’},只适用于contour
- extend : 一个四元组如(-3,4,-4,3),指定了图片的左上角和右下角,即划分了范围
一个简单的例子如下:
|
|
在等高线上绘制值
通过
|
|
绘制值,其中inline指定这个值是否被登高线遮住,一般是选择True,让值遮住线,fontsize则是选择值的字体大小。
例子如下:
|
|
绘制直方图
使用
|
|
进行绘制,主要的参数有
| 参数 | 值 |
|---|---|
| x | 输入,可以是一维或者多维数组(多维数组不要求等长) |
| bins | 区间,一个一维数组如[1,2,3,4],代表了1到2,2到3,3到4这三个区间,将会统计每个区间的个数并显示 |
| histtype | 绘制的柱的类型,可选的值有{‘bar’,‘barstacked’,‘step’,‘stepfilled’},step指只画线 |
| align | 可选的值有{‘left’, ‘mid’, ‘right’},指柱子是在一个bin中的位置 |
| orientation | 可选的值有{‘vertical’, ‘horizontal’},指定了图的方向 |
| stacked | 多维数据的显示方式,正常是放在柱子的旁边,如果是True,将堆叠在上方 |
| rwidth | 柱子宽度,感觉是按(0,1)的百分比来的 |
例子如下:
|
|
结果如下

矢量图
|
|
绘制矢量图首先需要一个X,Y网格,可以使用np.mgrid来绘制,X是一个二维矩阵,里面每个元素是每个点的X值,Y是一个二维矩阵,里面每个元素是每个点的Y值,对于每个点(X,Y)需要给出这一点的矢量(U,V)。满足X,Y,U,V已经可以绘制简单的矢量图,有以下参数可以对图片进行调整,比如density(用于调整图片矢量的疏密),linewidth(用于调整,图上矢量线的宽度),color(调整图上矢量的颜色),linewidth和color都可以是二维变量,猜测是表示每个矢量的颜色。除此之外,可以设定图中矢量经过的点…以下是例子
|
|