python可视化 matplotlib、seaborn、mayavi

 

0前言

内容包括:色图、matplotlib、seaborn、mayavi、traits、traitsUI、movepy  等。

 

 

 

1 概述

1.1 什么是RGB空间

所谓RGB空间就是red,green和blue颜色3个向量张成的空间,正好类似于3维欧氏空间。

3个向量均归一化了,其中(0,0,0)处为黑色,(1,1,1)处为白色。这种映射关系和光学棱镜色散和叠加相对应。

简单的例子:RGB空间(1,0,0)为纯红色,(0,0,1)为纯蓝色。

python可视化 matplotlib、seaborn、mayavi_第1张图片

实际应用常用的比重数值范围也可以将[0,1]编码映射到[0, 255]区间。

颜色原理参见:

https://www.cnblogs.com/yxnchinahlj/archive/2011/03/04/1970735.html

1.2什么是色图

色图即颜色系统,定义了一种颜色序列,是一个M*3的实数矩阵,每一行是定义一种颜色的一个RGB向量,3列分别是红、绿、蓝的比重。颜色图的第m行定义第m种颜色。

不同色图从起始到结束的颜色序列如下图。

更多色图参见:

http://scipy.github.io/old-wiki/pages/Cookbook/Matplotlib/Show_colormaps

 

jet色图:

jet格式的色图,起始(索引最小值)为蓝色,结束(索引最大值)为红色,过渡色为绿、黄色。

https://ww2.mathworks.cn/help/matlab/ref/jet.html

例如m=8时的jet颜色序列值如下:

%matlab

K>> jet(8)

ans =

         0         0    1.0000
         0    0.5000    1.0000
         0    1.0000    1.0000
    0.5000    1.0000    0.5000
    1.0000    1.0000         0
    1.0000    0.5000         0
    1.0000         0         0
    0.5000         0         0

husl色图:

人对颜色的感知并非线性的,对黄色和绿色更敏感,会认为它们更亮一点,而认为蓝色更暗一点。HUSL色彩系统针对这个情况做了一些调整。

HLS:

HUSL:

HSV和HLS:

HSV 颜色空间(色调、饱和度和值)

HLS 空间(色调、亮度和饱和度)

HSV 和 HLS颜色空间:https://www.cnblogs.com/fuhang/p/9175901.html

HSV:

python可视化 matplotlib、seaborn、mayavi_第2张图片

HUSL、HLS、HSV简单理解:

三者的色调(基色)相同,饱和度、亮度的规定不同。

 

2 matplotlib系列

2.1示例

 

2.2plot函数

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html

 

2.3LinearSegmentedColormap函数

自定义色图

官网解释:https://matplotlib.org/api/_as_gen/matplotlib.colors.LinearSegmentedColormap.html

例程:https://www.programcreek.com/python/example/93865/matplotlib.colors.LinearSegmentedColormap.from_list

 

2.4坐标轴等刻度

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.axis('equal')

对于3D图形,这句ax = fig.gca(projection='3d')一定要加上参数,且需要在plot前执行,否则没有效果。

加上3D参数的效果:3个axis是垂直的。

python可视化 matplotlib、seaborn、mayavi_第3张图片

不加3D参数的效果:怎么看怎么不对。

python可视化 matplotlib、seaborn、mayavi_第4张图片

使用以下语句时,有时会使z轴也等刻度,且等刻度后,各坐标轴的长度会相差较大,根据效果适当使用。

plt.gca().set_aspect('equal', adjustable='box')

 

2.5 设置栅格,axes脊柱(坐标轴),背景颜色

原文见:https://blog.csdn.net/helunqu2017/article/details/78650339

摘要如下:

删格操作

打开栅格:plt.grid(true)

设置栅格格式:plt.grid(color='r', linestyle='--', linewidth=1,alpha=0.3)

坐标轴操作:
ax.spines['top'].set_visible(False) #去掉上边框
ax.spines['bottom'].set_visible(False) #去掉下边框
ax.spines['left'].set_visible(False) #去掉左边框
ax.spines['right'].set_visible(False) #去掉右边框


背景色操作:

(1)设置figure背景颜色

facecolor:背景颜色  edgecolor:边框颜色

plt.figure(facecolor='blue',edgecolor='black')

fig=plt.gcf()
fig.set_facecolor('green')

fig = plt.figure()
ax = fig.gca() 
ax.set_facecolor('black')

(2)设置axes背景颜色

a = plt.axes([.65, .6, .2, .2], facecolor='k')  #pyplot api命令-黑色背景

或者

ax1=plt.gca()

ax1.patch.set_facecolor("gray")            #设置ax1区域背景颜色               

ax1.patch.set_alpha(0.5)                      #设置ax1区域背景颜色透明度

2.6 plt.scatter()

https://blog.csdn.net/m0_37393514/article/details/81298503

2.7简单动画FuncAnimation()

from matplotlib.animation import FuncAnimation

网上例程较多。略。

2.8清空clf

清空figure,并且可以设置保持原有的观察视角。

f = plt.figure()

...
f.clf(keep_observers=True)   # 默认False

Set *keep_observers* to True if, for example,
a gui widget is tracking the axes in the figure.

设置视角保持,如果观察时已经旋转过,则clf后不会把视角复位。

重新画一帧时,不需要重新调整视角。

2.x matplotlib的不足

1)3D显示时,无法设置zlabel。

2)3D显示时,坐标范围经常未覆盖所要显示的图形,导致看起来像是一片空白,需要手动调整显示范围,不方便;

3)坐标轴等长显示,ax.axis('equal'),经常没有实现等长的视觉效果;

4)标注:标注信息不会随着图像旋转移动,因此图像如果旋转移动了,标注还在原位置,失去了标注的一个重要意义。

5)规模:3D显示,当点数5000以下时,比较顺畅,当过万甚至几万时,会卡顿甚至软件罢工,这是因为底层没有使用opengld原因。对于动辄几万的3D点云,使用matplotlib只能做抽样显示等轻量处理。

以上是使用中发现的一些不变之处。需要继续探索。

 

3 seaborn系列

从零开始学:

Seaborn从零开始学习教程(一) 风格选择

Seaborn从零开始学习教程(二) 颜色调控篇

数据可视化:

(一)——整体样式与调色板:https://blog.csdn.net/ICERON/article/details/85088582

(二)——分布数据可视化:https://blog.csdn.net/ICERON/article/details/85300451

(三)——探索变量之间的关系:https://blog.csdn.net/ICERON/article/details/88734168

(四)—— 分类数据可视化:https://blog.csdn.net/ICERON/article/details/89158201

3.1示例

# pycharm
data = np.random.rand(3, 3)
cmap = sns.diverging_palette(200, 20, sep=16, as_cmap=True)
ax = sns.heatmap(data, cmap=cmap, center=0.5)
plt.show()

3.1 diverging_palette函数

http://seaborn.pydata.org/generated/seaborn.diverging_palette.html

seaborn使用husl色图,不支持jet色图,相近的可以用husl的蓝白红调色板代替。

diverging_palette函数使用husl颜色系统的离散色板。你需随意传递两种颜色,并设定明度和饱和度的端点。函数将使用husl的端点值及由此产生的中间值进行均衡。

seaborn.diverging_paletteh_negh_poss = 75l = 50sep = 10n = 6center ='light'as_cmap = False 

参数:

h_neg,h_pos:float in [ 0,359 ]

h_neg色调起始颜色,h_pos色调结束颜色。

s:在[0,100]中浮动,可选

锚定地图两个范围的饱和度。

l:浮动[0,100],可选

锚定地图两个范围的亮度。

n:int,可选

调色板中的颜色数(如果不返回cmap)

center:{“light”,“dark”},可选

调色板的中心是浅还是暗

as_cmap:bool,可选

如果为true,则返回matplotlib colormap对象而不是颜色列表。

返回:

palette或cmap:seaborn调色板或matplotlib colormap

类似列表的颜色对象作为RGB元组,或者可以将连续值映射到颜色的颜色图对象,具体取决于as_cmap参数的值 。

 

3.2 heatmap函数

seaborn.heatmap官方操作手册:http://seaborn.pydata.org/generated/seaborn.heatmap.html

其他:https://blog.csdn.net/m0_38103546/article/details/79935671

 

 

4mayavi

安装:

pip install --user mayavi

依赖包:traits, pyface, traitsui, configobj, apptools, envisage, vtk, mayavi

4.1清空clf 

from mayavi import mlab

...

mlab.clf(figure=None):

figure参数可以指定清空哪个figure。

这里没有视角保持keep_observers设置,因为clf不改变视角。

但是mayavi的plot3d等函数,会自动改变视角。需要对画图函数进行设置。

 

5 movepi

http://python.jobbole.com/81185/

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(python可视化 matplotlib、seaborn、mayavi)