matplotlib能够输出MATLAB风格的图片。我因为用的不多所以总是忘记怎么用。本文的目的是对matplotlib的用法做个记录和简单总结,希望在忘记用法的时候看一下就能记起来。本文基于3.2.1版本,如果版本升级用法有较大变化的话还是要参考官方文档。
本文还参考了:https://www.cnblogs.com/chenzhijuan-324/p/10700585.html
绘图的基本步骤
(1)导入matplotlib.pyplot包;(2)创建绘图区;(3)创建和选定子图;(4)设置子图的参数(x,y,图类型,颜色等);(5)输出图形;
示例如下,这里使用了几种常用的图,并展示不同的参数配置用法:
import numpy as np
import matplotlib.pyplot as plt
names = ['a', 'b', 'c', 'd' ,'e']
values_1 = [8, 13, 22, 25, 32]
values_2 = [59, 73, 13, 47, 29]
x = np.linspace(0.1, 10, 100)
aa = np.arange(len(names))
width = 0.36
# 初始化图片
plt.figure(figsize=(16, 9))
plt.suptitle('Matplotlib Examples')
# 条形图 + 折线图 重叠
plt.subplot(241)
plt.bar(names, values_1, color='#0cff0c') # neon green,https://xkcd.com/color/rgb/
plt.plot(names, values_2,color='#ff9408', marker='o') # tangerine
# 条形图 - 输出数据标签
plt.subplot(242)
plt.bar(aa - width/2, values_1, width, label='v1')
plt.bar(aa + width/2, values_2, width, label='v2')
for a,b in zip(aa,values_1):
plt.text(a-width, b+0.1, '%.f' % b) #输出数据的标签
for a,c in zip(aa,values_2):
plt.text(a, c+0.1, '%.f' % b)
plt.xticks(aa, names)
# 折线图1
plt.subplot(243)
plt.plot(x, np.sin(x), label='sine',color='c', linestyle='--')
plt.plot(x, 2*np.cos(x), label='cosine', color='r')
plt.legend(loc='lower center')
plt.text(0.5,1,'This is an example text.') # 指定位置,输出文本
# 折线图2
plt.subplot(244)
plt.plot(x, 6*x+1, label='linear', color='m', linestyle=':')
plt.plot(x, x**2, label='quadratic', color='y', linestyle='-.', linewidth = '3')
plt.plot(x, 12/x, label='cubic', color='k')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
# 饼图
plt.subplot(245)
plt.pie(values_1, labels=names, explode=(0,0,0.1,0,0), autopct='%1.1f%%', shadow=True, startangle=90)
plt.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
# 极坐标图
plt.subplot(246, projection='polar', rmax=1, rticks=[0.2, 0.4, 0.6, 0.8, 1], rlabel_position=-22.5)
r = np.arange(0, 1, 0.01)
theta = 4 * np.pi * r
plt.plot(theta, r)
plt.title("A line plot on a polar axis", va='bottom')
plt.grid(True)
# 散点图(不同标记)
plt.subplot(247)
plt.scatter(names, values_1, marker='s')
plt.scatter(names, values_2)
plt.scatter(names, [34,55,49,17,66], marker='^')
# 带表的图
plt.subplot(248)
plt.plot(names, values_1, 'o--')
plt.plot(names, values_2, '^--')
plt.table(cellText=[values_1,values_2],
rowLabels=['values_1','values_2'],
colLabels=names,
loc='bottom')
plt.subplots_adjust(left=0.1, bottom=0.1)
plt.xticks([])
#plt.show()
plt.savefig('matplotlib_eg.png') # 保存图片
在jupyter notebook中执行结果如下:
matplotlib.pyplot下的常用函数:
linestyle可选参数:
marker(标记)可选参数:
color可选颜色:
也可以在这里找到RGB表示方法来使用更多的颜色,例如:
目前我用到的就只有这么多了。后面需要用到的话我再补充吧。
使用subplot 对多图布局
可以有两种格式:subplot(235) 或subplot(2,3,5) 。两种格式的意义是一样的,都表示2行3列的第5张图。但是如果图非常多,那么就需要加逗号了,例如subplot(4,5,17),表示4行5列的第17张图(即第4行的第2张图)。
下面的代码是布局的示例。实际使用中不必要这么麻烦,只需要规划好子图的个数和布局,简单点就好啦~
#coding=utf-8
import matplotlib.pyplot as plt
fig = plt.figure(facecolor='white', figsize=(16,12))
plt.subplot(461)
plt.text(0.3,0.5,'subfig 1',size=13)
plt.subplot(462)
plt.text(0.3,0.5,'subfig 2',size=13)
plt.subplot(4,6,3)
plt.text(0.3,0.5,'subfig 3',size=13)
plt.subplot(4,2,2)
plt.text(0.4,0.5,'subfig 4',size=13)
plt.subplot(4,3,4)
plt.text(0.4,0.5,'subfig 5',size=13)
#当需要占用多列(例如三列中需要占用两列),则可用此方法。(4,6)表示子图的布局,(1,2)表示起始位置【(0,0)为起始点】,colspan表示占用的列数,rowspan表示占用的行数
plt.subplot2grid((4,6),(1,2),colspan=3)
plt.text(0.4,0.5,'subfig 6',size=13)
plt.subplot(4,6,12)
plt.text(0.3,0.5,'subfig 7',size=13)
plt.subplot(2,3,4) #也可以这样表示: plt.subplot2grid((4,6),(2,0),colspan=2,rowspan=2)
plt.text(0.4,0.5,'subfig 8',size=13)
plt.subplot(2,6,9)
plt.text(0.3,0.5,'subfig 9',size=13)
plt.subplot(2,2,4)
plt.text(0.4,0.5,'subfig 10',size=13)
plt.show()
布局如下: