第一天正式学习matplotlib画图,有点杂乱,做个记录,过两天看实例时应该会好一点。
1. 第一个matplotlib生成图
"""
1. np.linspace(0,10,1000)生成从0~10的1000个均匀数
2. 注意plot()中参数的前后顺序,先画图数据,然后颜色形状,然后标签
3. 'b--'这种简单表示方法,可以通过'plt.xticks??'在Ipython中运行查看
4. plt.plot(..label='$计算式$'..) 这种标签字符串前后加$号的方法为latex语法,可以显示数学公式,但会降低画图速度!!!!
5. plt.legend()有设置方式,但默认会自动寻找最佳位置
"""
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,10,1000) #(1)
y = np.sin(x)
z = np.cos(x**2)
plt.figure(figsize=(8,4))
plt.plot(x,y,color='r',label='$sin(x)$',lw=2) #(2)
plt.plot(x,z,'b--',label='$cos(x**2)$',lw=2) #(3)(4)
plt.xlabel('Time(s)')
plt.ylabel('volt')
plt.title('pyplot_example')
plt.ylim(-1.2, 1.2)
plt.legend() #(5)
plt.show()
*********** 第一处小结: *************
1. 程序前的解释语法与注意说明。
2. 画图顺序: 设置画图数据 ——> plt.figure()对象 ——> plt.plot()输入数据与参数绘图 ——> plt.xlabel/ylabel/title/xlim/ylim/legend()等参数设置(具体参数内容之后总结) ——> plt.show() 显示图像
2. 绘制多子图
figure是绘制对象,一个figure对象可以包含多个Axes子图,一个Axes是一个绘图区域,不加设置时,Axes为1,且每次绘图其实都是在figure上的Axes上绘图。
接下来看怎么绘制多子图。
使用 plt.subplot(numRows, numCols, plotNum),参数分别代表行数,列数,以及编号,编号顺序为从左到右、从上到下,从1开始。如果这三个参数值都小于10,可以去掉逗号写。子图不能重叠,如果新创建的子图覆盖了前子图,前子图会被删除掉。
"""
1. for index,value in enumerate('序列'/列表):
这种for...in enumerate循环会取出两个值,一个是index即下标,一个是value即实际值,在用到下标时很方便;如果只写一个值for xx in enumerate(),会返回给 xx 一个(index,value)元组
2. 321+idx:321,322,323,324,325,326 即figure分为三行两列6个axes,分别设置 axisbg 背景颜色
"""
for idx,color in enumerate('rgbyck'):
plt.subplot(321+idx, axisbg=color)
plt.show()
************ 第二处小结:***************
1. 学会一种新循环,for index,value in enumerate()可以取出下标和值
2. plt.subplot(where, what) 设置where-321三位置值,what-参数
3. figure()与axes()之间的关系
"""
1. 建立两个figure,对第二个figure设置axes
2. 循环中在 figure 和 ax1,ax2上做图
3. plt.figure(1) 在figure1存在的时候,作为选取作用
4. plt.sca(ax1) 选取ax1,使用plt.sca()-select current axes
"""
plt.figure(1)
plt.figure(2)
ax1 = plt.subplot(121)
ax2 = plt.subplot(122)
x = np.linspace(0,3,100)
for i in range(5):
plt.figure(1)
plt.plot(x, np.exp(i*x/3))
plt.sca(ax1)
plt.plot(x, np.sin(i*x))
plt.sca(ax2)
plt.plot(x, np.cos(i*x))
plt.show()
************ 第三处小结: **************
1. figure()相当于给了一个画桌,axes()是上面的画纸,第一步:设置figure,第二步,设置axes,是直接跟在对应figure语句之后的
2. 步骤:plt.figure(1) ——> plt.subplot(121) ——> 设置数据 ——> plt.figure(1) - plt.plot() ——> plt.sca(ax1) - plt.plot() ——> plt.show()
4. 设置子图布局 plt.subplot2grid( )
"""
plt.subplot2grid( ) 参数意义:(3,3)-整个figure分为3行3列
(1,2)-从0开始计数,从第1行2列的窗口开始做图
colspan/rowspan-列向/行向跨度,缺省时默认跨度1
"""
fig = plt.figure(figsize = (6,6))
ax1 = plt.subplot2grid((3,3), (0,0), colspan = 2)
ax2 = plt.subplot2grid((3,3), (0,2), rowspan = 2)
ax3 = plt.subplot2grid((3,3), (1,0), rowspan = 2)
ax4 = plt.subplot2grid((3,3), (1,1)) # rowspan/colspan缺省,默认为1
ax5 = plt.subplot2grid((3,3), (2,1), colspan = 2)
plt.show()
************ 第四处小结:**************
axes可以在生成时直接设置分图,plt.subplot2grid( )