matplotlib
-
Matplotlib是一个Python 2D绘图库,能够以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形,用来绘制各种静态,动态,交互式的图表。
-
Matplotlib可用于Python脚本,Python和IPython Shell、Jupyter notebook,Web应用程序服务器和各种图形用户界面工具包等。
-
Matplotlib是Python数据可视化库中的泰斗,它已经成为python中公认的数据可视化工具,我们所熟知的pandas和seaborn的绘图接口其实也是基于matplotlib所作的高级封装。
例子
Matplotlib的图像是画在figure(如windows,jupyter窗体)上的,每一个figure又包含了一个或多个axes(一个可以指定坐标系的子区域)。最简单的创建figure以及axes的方式是通过pyplot.subplots命令,创建axes以后,可以使用Axes.plot绘制最简易的折线图。
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
fig, ax = plt.subplots() # 创建一个包含一个axes的figure,plt.subplots(1,2) 创建一行两列的figure
ax.plot([1, 2, 3, 4], [1, 4, 2, 3]); # 绘制图像
可简化为
line =plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
figure的组成
- Figure:顶层级,用来容纳所有绘图元素
- Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成
- Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素
- Tick:axis的下属层级,用来处理所有和刻度有关的元素
两种接口绘图
- 显式的建立figure和axes
plt.rcParams['font.sans-serif'] = ['simhei'] # 中文字体设置-黑体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
x = np.linspace(0,2,100)#创建一个数字序列
fig,ax = plt.subplots()#新建一个figure和一个axes
ax.plot(x,x,label = "linear")#画直线
ax.plot(x,x**2,label = "平方")
ax.plot(x,x**3,label = "立方")
ax.set_xlabel("x label")#设置横坐标名称
ax.set_ylabel("y label")#设置纵坐标名称
ax.set_title("例子")#设置标题
ax.legend()#设置图例
plt.show()
- 调用plt.plot()自动创建figure和axes
x = np.linspace(0, 2, 100)
plt.plot(x, x, label='linear')
plt.plot(x, x**2, label='平方')
plt.plot(x, x**3, label='立方')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
plt.show()
通用绘图模板
# step1 准备数据
x = np.linspace(0, 2, 100)
y = x**2
# step2 设置绘图样式,这一模块的扩展参考第五章进一步学习,这一步不是必须的,样式也可以在绘制图像是进行设置
mpl.rc('lines', linewidth=4, linestyle='-.')
# step3 定义布局, 这一模块的扩展参考第三章进一步学习
fig, ax = plt.subplots()
# step4 绘制图像, 这一模块的扩展参考第二章进一步学习
ax.plot(x, y, label='linear')
# step5 添加标签,文字和图例,这一模块的扩展参考第四章进一步学习
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_title("Simple Plot")
ax.legend() ;
思考题
- 两种绘图模式的优缺点和各自适合的使用场景
- 第一种对matploylib绘图的过程有更加多的了解
- 第二种方法可以缩短代码行数,更加简单
- pyplot绘图模式的简单模板
# step1 准备数据
x = np.linspace(0, 2, 100)
y = x**2
# step2 绘制图像, 这一模块的扩展参考第二章进一步学习
plt.plot(x, y, label='linear',linewidth = 4 ,linestyle = "-.")
'''
'-' solid line style
'--' dashed line style
'-.' dash-dot line style
':' dotted line style
'''
# step3添加标签,文字和图例,这一模块的扩展参考第四章进一步学习
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
plt.show()