编程字典Pandas教程 http://codingdict.com/article/8270
清华计算机博士带你学-Python金融量化分析 https://www.bilibili.com/video/BV1i741147LS?t
https://matplotlib.org/stable/index.html
1. 介绍
matplotlib.pyplot是一个有命令风格的函数集合,它看起来和MATLAB很相似。每一个pyplot函数都使一副图像做出些许改变,例如创建一幅图,在图中创建一个绘图区域,在绘图区域中添加一条线等等。在matplotlib.pyplot中,各种状态通过函数调用保存起来,以便于可以随时跟踪像当前图像和绘图区域这样的东西。绘图函数是直接作用于当前axes(matplotlib中的专有名词,图形中组成部分,不是数学中的坐标系。)
2. plot函数
plot函数:绘制折线图
折线属性
- 线性linestyle(-,-.,–,…)
- 点型marker(v,^,s,*,H,+,x,D,o,…)
- 颜色color(b,g,r,y,k,w,…)
例子:
plt.plot([1,2,3,4,5],[4,5,6,1,3])
plt.show()
这表示的是(x,y)对,(1,4)(2,5)(3,6)(4,1)(5,3)。这里有第三个可选参数,它是字符串格式的,表示颜色和线的类型。该字符串格式中的字母和符号来自于MATLAB,它是颜色字符串和线的类型字符串的组合。默认情况下,该字符串参数是’b-‘,表示蓝色的实线。
举一个使用红色实心圆点画线绘制上述点集的例子:
plt.plot([1,2,3,4,5],[4,5,6,1,3],'-.ro')
plt.show()
多条曲线
与MATLAB一样可以使用figure命名一张图,并且作为分隔。
plt.figure('one')
a = np.arange(0,10,0.25)
plt.plot(a,a ** 2)
plt.figure('two')
plt.plot(a,a ** 2)
plt.plot(a,a ** 3)
plt.show()
工作在多图形(figures)和多坐标系(axes)
MATLAB和pyplot都有当前图形(figure)和当前坐标系(axes)的概念。所有的绘图命令都是应用于当前坐标系的。gca()和gcf()(get current axes/figures)分别获取当前axes和figures的对象。通常,你不用担心这些,因为他们都在幕后被保存了,下面是一个例子,创建了两个子绘图区域(subplot):
def f(t):
return np.exp(-t) * np.cos(2*np.pi*t)
t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)
plt.figure("2subplot")
plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')
plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
plt.show()
figure()命令在这儿可以不写,因为figure(1)将会被默认执行,同样,subplot(111)也是默认被执行的。
- subplot()函数:subplot(numbRow , numbCol ,plotNum ) or subplot(numbRow numbCol plotNum),对。看清楚,可以不用逗号分开直接写在一起也是对的。
- numbRow是plot图的行数;
- numbCol是plot图的列数;
- plotNum是指第几行第几列的第几幅图 ;
文字
text()命令可以被用来在任何位置添加文字,xlabel()、ylabel()、title()被用来在指定位置添加文字。
中文支持问题
python中使用matplotlib显示中文时,会遇到一些问题, 解决方案如下:
加入下面两行
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
常用字体:
黑体 SimHei 微软雅黑 Microsoft YaHei
微软正黑体 Microsoft JhengHei 新宋体 NSimSun
新细明体 PMingLiU 细明体 MingLiU
标楷体 DFKai-SB 仿宋 FangSong
楷体 KaiTi 仿宋_GB2312 FangSong_GB2312
楷体_GB2312 KaiTi_GB2312
图像标注
方法 | 说明 |
---|---|
plt.title() | 设置图像标题 |
plt.xlabel() | 设置x轴名称 |
plt.ylabel() | 设置y轴名称 |
plt.xlim() | 设置x轴范围 |
plt.ylim() | 设置y轴范围 |
plt.xticks() | 设置x轴刻度 |
plt.yticks() | 设置y轴刻度 |
plt.legend() | 设置曲线图例 |
例子:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# 设置数据
a = np.arange(0,5,0.1)
#设置输出的图片大小
figsize = 6.5,4.5
figure, ax = plt.subplots(figsize=figsize)
# 在同一幅图片上画两条折线
A,=plt.plot(a,a,'.g',label='y=x',linewidth=3.0)
B,=plt.plot(a,a ** 2,'-r',label='y=x^2',linewidth=3.0)
C,=plt.plot(a,a ** 3,'b-.',label='y=x^3',linewidth=3.0)
# B,=plt.plot(a,(3 * a ** 3 + 5*a**2+2*a+1),'b-.',label='B',linewidth=3.0)
# 设置图例并且设置图例的字体及大小
font1 = {'family': 'Times New Roman',
'weight': 'normal',
'size': 12,
}
legend = plt.legend(handles=[A, B, C], prop=font1)
# 设置坐标刻度值的大小以及刻度值的字体
plt.tick_params(labelsize=12)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
# 设置横纵坐标的名称以及对应字体格式
font2 = {'family': 'FangSong', # 仿宋
'weight': 'normal',
'size': 14,
}
plt.xlabel('横坐标',font2)
plt.ylabel('纵坐标',font2)
plt.title('Matplotlib实例——绘制数学函数图像',font2)
# 将文件保存至文件中并且画出图
plt.savefig('figure.eps')
plt.show()