上一篇讲了matplot画图的基本要素,这篇讲matplot几个基础图的画图操作。
折线图Polyline
画折线图的方法是pyplot.plot(),返回 matplotlib.lines.Line2D 对象
1 | import matplotlib.pyplot as plt |
进一步的,我们可以在一张图上绘制多个子图(即一张Figure上绘制多个Axes),此时我们借助的是pyplot.subplot()方法
这里我们画一个余弦函数,一个自定义函数,然后上下分布。
1 | import matplotlib.pyplot as plt |
散点图Scatter
画散点图的方法是pyplot.scatter(),返回 matplotlib.collections.PathCollection 对象,
1 | import matplotlib.pyplot as plt |
其中关于颜色的设置这部分,我们先看下官方注释里面的表达方式:
# - A single color format string.
# - A sequence of color specifications of length n.
# - A sequence of n numbers to be mapped to colors using cmap and
# norm.
# - A 2-D array in which the rows are RGB or RGBA.
颜色的表达方式
字符串表示法
A single color format string.
字符串表示的颜色,比如说红色可以用’red’或者’r’表示
1 | plt.scatter(X, Y, s=75, c='r', alpha=0.5) |
字符串序列表示法
A sequence of color specifications of length n.
用一个长度为n的颜色序列
1 | T = ['red'] * 512 + ['blue'] * 512 |
cmap表示法
具体可以参考这篇文章 画图离不开色彩–说说matplot的cmap
1 | import matplotlib.pyplot as plt |
RGB,RGBA二维数组表示法
很简单,和字符串表达方式类似,RGB或RGBA的表达方式可以表示的颜色更多。
1 | T = ['#42A5F5'] * 512 + ['#FF5252'] * 512 |
特别的,如果所有点都是同一个颜色:
1 | T = ['#42A5F5'] |
柱状图Bar
画柱状图的方法是 pyplot.bar(),返回 matplot.container.BarContainer 对象
1 | import matplotlib.pyplot as plt |
更进一步,我们将两个柱状图上下叠放在一起,并标注上具体的数值。
1 | import matplotlib.pyplot as plt |
直方图Histogram
画柱状图的方法是 pyplot.hist(),返回 matplotlib.patches.Patch 对象
1 | import matplotlib.pyplot as plt |
饼状图Pie
画饼状图的方法是 pyplot.pie(),返回 matplotlib.patches.Wedge 对象
1 | import matplotlib.pyplot as plt |
调整饼的偏离值
首先我们看explode参数,explode接受一个长度=值数量的数组,数组中的值的含义:
1 | # 正值表示向外偏离 |
1 | # 副值表示向外偏离 |
标注字符串的格式化
autopct参数可以接受None(默认),字符串或者函数。如果是一个字符串,则按照fmt%pct
的方式格式化。
1 | # 表示%分数表示,并保留两位小数 |
如果是函数的话,可以这样写:
1 | # 返回值是一个函数,该函数接受一个值,返回一个字符串 |
等高线图Contours
画等高线用的是plt.contour(),返回 matplot.contour.QuadContourSet 对象
首先我们需要了解,等高线图的数据和前面散点图和柱状图的二维数据结构不一样,多了一个维度:高度。也就是说,等高线图的数据集是由(x,y,h)这个三维点构成。
生成数据集:
1 | import matplotlib.pyplot as plt |
等高线间区域填充
1 | # plt.contourf()函数进行颜色填充, |
画等高线
1 | # 绘制等高线 |
等高线的标注
1 | #inline表示Label画在线内 |
三维图
绘制三维坐标轴空间
首先需要导入mpl_toolkits.mplot3d包中的Axes3D
1 | import numpy as np |
创建Figure对象,并用Axes3D画三维坐标轴
1 | fig = plt.figure() |
3D散点图
同样的,我们可以在三维坐标系中画散点图,区别只是数据有三个维度
1 | data = np.random.randint(0, 255, size=[40, 40, 40]) |
3D平面图
画三维平面图用到的是Axes3D.plot_surface()方法,该方法创建 mpl_toolkits_mlplot3d_art3d.Poly3DCollection 对象
1 | X = np.arange(-4, 4, 0.25) |
将跨度改成1,再看效果
1 | ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow')) |
zdir可选择的值有x,y,z,选择z相当于投影到XY平面,同样的,选择x相当于投影到YZ平面,选择y相当于投影到XZ平面。
1 | ax.contourf(X, Y, Z, zdir='z', offset=-2, cmap=plt.get_cmap('rainbow')) |