第十章 第三方库-Matplotlib-1
本章我们介绍几种第三方库,理解Python的强大功能。主要有NumPy、SciPy和 Matplotlib(绘图库),这些库提供了一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
10.1 Matplotlib
Matplotlib库由各种可视化类构成,内部结构复杂,受Matlab启发。matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式。import matplotlib.pyplot as plt
Matplotlib是第一个Python可视化库,绘制数据图,有许多别的程序库都是建立在其基础上或者直接调用该库,可以很方便地得到数据的大致信息,功能非常强大,但也非常复杂。
我们从简单的开始。
1.plot函数实例
plt.plot(x, y,format_string,**kwargs)
format_string:控制曲线的格式字符串(可选),由颜色字符、风格字符和标记字符组成
x:x轴数据,列表或数组,可选
y:y轴数据,列表或数组
format_string:控制曲线的格式字符串
**kwargs: 第二组或更多的(x,y,format_string)
format_string:控制曲线的格式字符串,可选。由颜色字符、风格字符和标记字符组成

风格字符 说明
'-' 实线
'--' 破折线
'-.' 点划线
':' 虚线
' ' 无线条

import numpy as np
import matplotlib.pyplot as plt
a=np.arange(10)
print(a)
plt.plot(a,a*2,a,a*3,a,a*4,a,a*5) #修改此行代码
plt.show()
运行结果如下,输出图形为下图左侧。:
[0 1 2 3 4 5 6 7 8 9]

#修改此行代码 位置替换为下述代码,输出图形为上图中间。
plt.plot(a,a*2,'r:D',a,a*3,'b-o',a,a*4,'m-.,',a,a*5,'r:x')
**kwargs: 第二组或更多(x,y,format_string)
color: 控制颜色 如color='green'
linestyle:线条控制 如linestyle='dashed'
marker:标记风格,marker='o'
markerfacecolor:标记颜色,markerfacecolor='blue'
markersize:标记尺寸,markersize=20
#修改此行代码 位置替换为下述代码,输出图形为上图右侧。
plt.plot(a,a*2,'r:D',a,a*3,'b-o',a,a*4,'m-.,',a,a*5,'r:x',markerfacecolor='yellow',markersize=10)
再看一个正弦曲线的例子:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2 * np.pi, 0.01)
y = np.sin(x)
plt.plot(x,y,'r:D')
plt.show()

给图加点名称,坐标轴提示信息如下绿色部分代码,运行结果如上图中间:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2 * np.pi, 0.01)
y = np.sin(x)
plt.plot(x,y,'r:D')
plt.xlabel("x轴标签")
plt.ylabel("y轴标签")
plt.title("正弦曲线sin(x)")
plt.show()
中文没能显示出来,Why?...... 接着往下看吧!
2.pyplot的中文显示
pyplot并不默认支持中文显示,需要rcParams修改字体实现。两种方式:全局设置中文字体和局部设置中文字体。上图加上下面绿色部分代码,绘制图形为上图右侧部分,汉字显示正常。
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family']='SimHei' # 'SimHei'是黑体
x = np.arange(0, 2 * np.pi, 0.01)
y = np.sin(x)
plt.plot(x,y,'r:D')
plt.xlabel("x轴标签")
plt.ylabel("y轴标签")
plt.title("正弦曲线sin(x)")
plt.show()
但是细心的你会发现怎么纵轴上的负号没有显示出来呢,百度一下,增加下面第一行绿色部分代码即可,第二行绿色部分代码是将图形保存至文件,下图左侧就是从文件sinx.png中复制过来的图像。
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['axes.unicode_minus']=False
plt.rcParams['font.family']='SimHei'
plt.rcParams['font.size']=16
x = np.arange(0, 2 * np.pi, 0.01)
y = np.sin(x)
plt.plot(x,y,'r:D')
plt.xlabel("x轴标签")
plt.ylabel("y轴标签")
plt.title("正弦曲线sin(x)")
plt.savefig('sinx',dpi=600)
plt.show()

下面我们来解释一下rcParams。
rcParams的属性
属性 说明
'font.family' 用于显示字体的名字
'font.style' 字体风格,正常'normal'或斜体'italic'
'font.size' 字体大小,整数字号或者'large','x-small'
中文字体的种类
rcParams['font.family']
中文字体 说明
'SimHei' 中文黑体
'Kaiti' 中文楷体
'LiSu' 中文隶书
'FangSong' 中文仿宋
'YouYuan' 中文幼圆
STSong 华文宋体
上面所有中文都按照统一的字体显示,有时候这不是我们想要的结果。所以提供第二种方法为局部设置中文字体,在有中文输出的地方,增加一个属性:fontproperties,上图右侧为此种方式结果,代码如下,绿色部分为修改行。
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['axes.unicode_minus']=False
x = np.arange(0, 2 * np.pi, 0.01)
y = np.sin(x)
plt.plot(x,y,'r:D')
plt.xlabel("x轴标签", fontproperties='SimHei',fontsize=16)
plt.ylabel("y轴标签", fontproperties='SimHei',fontsize=16)
plt.title("正弦曲线sin(x)", fontproperties='Kaiti',fontsize=20)
plt.savefig('sinx',dpi=600)
plt.show()
下面例子参考网络资料,大家可以自己学习,修改代码,画出自己的图形。