Python基础教程(七)matplotlib

编程字典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函数:绘制折线图

折线属性

  1. 线性linestyle(-,-.,–,…)
  2. 点型marker(v,^,s,*,H,+,x,D,o,…)
  3. 颜色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()

Python基础教程(七)matplotlib
figure()命令在这儿可以不写,因为figure(1)将会被默认执行,同样,subplot(111)也是默认被执行的。

  • subplot()函数:subplot(numbRow , numbCol ,plotNum ) or subplot(numbRow numbCol plotNum),对。看清楚,可以不用逗号分开直接写在一起也是对的。
  1. numbRow是plot图的行数;
  2. numbCol是plot图的列数;
  3. 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

例子:

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,10,0.25)

#设置输出的图片大小
figsize = 11,9
figure, ax = plt.subplots(figsize=figsize)

# 在同一幅图片上画两条折线
A,=plt.plot(a,a ** 2,'-r',label='A',linewidth=3.0)
B,=plt.plot(a,a ** 3,'b-.',label='B',linewidth=3.0)

# 设置图例并且设置图例的字体及大小
font1 = {'family': 'Times New Roman',
         'weight': 'normal',
         'size': 24,
         }
legend = plt.legend(handles=[A, B], prop=font1)

# 设置坐标刻度值的大小以及刻度值的字体
plt.tick_params(labelsize=24)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]

# 设置横纵坐标的名称以及对应字体格式
font2 = {'family': 'FangSong',  # 仿宋
         'weight': 'normal',
         'size': 30,
         }

plt.xlabel('横坐标',font2)
plt.ylabel('纵坐标',font2)
plt.title('开方函数',font2)

# 将文件保存至文件中并且画出图
plt.savefig('figure.eps')
plt.show()

Python基础教程(七)matplotlib

上一篇:【五】空间域图像增强


下一篇:Latex子图序号按全局排序而非局部排序的问题