-
Notifications
You must be signed in to change notification settings - Fork 0
Matplotlib
本文档介绍Python中数据可视化,不仅仅包含Matplotlib这个库
import matplotlib.pyplot as plt
%matplotlib inline # %matplotlib widget 交互式
Matplotlib有四类基础类型的对象容器:Figure、Axes、Axis、Tick。figure即图片本身,负责图形大小、位置;Axes负责坐标轴位置、绘图;Axis负责坐标轴的设�置等;Tick负责格式化样式等。下面是Matplotlib figure的组成
matplotlib绘制的图都位于figure对象中,可以使用figure方法生成一个新的图片
fig = plt.figure()
此时的图为一个空白图,可以在该图上添加一个或多个子图
- 使用add_subplot添加子图
# 创建2*2个子图的1~3图
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
agg_subplot
返回Axes Subplot对象,使用这些对象可以直接在子图上调用对象的方法进行绘图,若此时直接使用plt.plot
进行绘图,则会在最后创建的子图上进行绘图。
ax1.hist(np.random.randn(100), bins=20, color='k', alpha=0.4)
ax2.scatter(np.arange(30), np.arange(30) + 3*np.random.randn(30))
plt.plot(np.random.randn(50).cumsum(), 'k--') # 直接绘制在最后一个子图上
-
subplots函数
subplots函数可以绘制x*y个子图,返回一个figure对象和一个Axes对象:fig, axes = subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True,subplot_kw=None, gridspec_kw=None, **fig_kw)
- fig为figure对象,可以用来保存图片使用`fig.savefig('name')
- axes可以通过二维数组的方法来访问子图,例如axes[0,1]这样
- nrows and ncols:行和列的个数。
- sharex and sharey: 是否共享x y 轴。
- subplot_kw: 传入add_subplot的关键字参数字典,用于生成子图。
- **fig_kw:生成图片时使用的figure参数,如 figsize、facecolor等。
-
调整子图间距
subplots_adjust(left=None, bootm=None, right=None, top=None, wspace=None, hspce=None)
- left: 子图左边缘的位置
- right: 子图右边缘的位置
- bottom: 子图底部边缘的位置
- top: 子图顶端边缘的位置
- wspace: 子图只之间的宽度
- hspace: 每行子图之间padding的高度
子图之间若出现遮挡,也可以使用
tight_layout
方法自动调整,也支持使用参数自行调整plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)
下面是plot函数的详细介绍
plot(x, y, linestyle, linewidth, color, marker, markersize, markeredgecolor, markerfacecolor, markeredgewidth, label, alpha)
其中x为x轴数值,y为y轴数值,此外也可以传入多个x1, y1, x2, y2同时绘制多个图,下面为其他参数解释:
- linestyle: 折线类型,实线、虚线和点画线等
- linewidth: 折线宽度
- marker: 为折线图添加点,并设置形状
- markersize: 点的大小
- markeredgecolor: 点的边框颜色
- markerfacecolor: 点的填充颜色
- markeredgewidth: 点的边框宽度
- label: 折线图标签(用于标签)
- alpha: 折线图透明度
还有绘制其他形状图形的常用函数
函数 | 说明 |
---|---|
pie | 绘制饼状图 |
bar | 绘制柱状图 |
hist | 绘制二维直方图 |
scatter | 绘制散点图 |
下面是调整绘图样式的详细参数选项
符号参数 | 可选类型 | 说明 |
---|---|---|
color 线条颜色 | b | 蓝色 |
c | 青色 | |
g | 绿色 | |
k | 黑色 | |
m | 洋红色 | |
r | 红色 | |
w | 白色 | |
y | 黄色 | |
linestyle 线条样式 | - | 实线 |
-- | 虚线 | |
-. | 点画线 | |
: | 点线 | |
marker 数据点形状 | . | 点 |
o | 圆圈 | |
* | 星形 | |
x | 十字 | |
s | 正方形 | |
p | 五角星 | |
d | 钻石 | |
h | 六角形 | |
+ | 加号 | |
^ < > | 各种三角形 | |
1234 | Tropod向上下左右各个方向 |
特殊属性 drawstyle='steps-post'绘制梯形图形
-
设置标题、轴标签、刻度和刻度标签
设置标题使用set_title
方法fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.set_title('My first matplotlib plot')
使用
xlim
函数不加参数返回当前x轴范围,加上参数后可以设置x轴范围plt.xlim([0,10]) # 设置x轴范围从0到10
使用
set_xticks
和set_xticklabels
分别设置x轴刻度和标签(指出要显示的刻度,并在下面写个标签,可以为数据也可以为字符串)对于y轴同理,将x换成y即可
还可以使用
set
方法批量设置绘图属性props = { 'title': 'My first matplotlib plot', 'xlabel': 'Stages' } ax.set(**props)
-
添加图例
plt.plot(np.random.randn(1000).cumsum(), 'k', label = 'one') plt.legend(loc='best')
legend
函数显示标签,与之前绘图添加的label
对应,参数loc
可以使用'best'会自动将图例放在合适的地方。 -
注释与子图加工 使用
text
方法在图中位置添加注释plt.text(x, y, 'string', family='font', fontsize=n)
- x y: 分别为注释的位置
- 'string': 注释内容
- family: 注释字体
- fontsize: 字体大小
使用arrow
函数可以添加箭头,和注释搭配起来很好用
matplotlib.pyplot.arrow(x, y, dx, dy, hold=None, **kwargs)
参数
- x, y: 箭头起点做I报
- dx, dy: 箭头在xy轴上的长度
- width: 箭头宽度,默认0.001
- length_includes_head: 头是否包含在长度之中,默认False
- head_width: 箭"头"的宽度,默认 3*width
- head_length: 箭"头"的长度,默认 1.5*head_width
- shape: [‘full’, ‘left’, ‘right’],箭头形状,默认‘full’
annotate
方法用于直接添加带箭头的注解
Axes.annotate(s, xy, *args, **kwargs) `` - s: 注解文本 - xy: (float, float) 注解的点(箭头指向)的坐标 - xytext:(float,float) 注释内容的坐标位置 - xycoords:被注释点的坐标系属性 - color: 设置字体颜色