本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

Matplotlib库基本使用

Matplotlib是一个Python2D绘图库,通过Matplotlib,开发者可以仅需要几行代码,便可以生成折线图,直方图,条形图,饼状图,散点图等。

一、安装:

如果是用Anaconda,可以通过conda install matplotlib或者通过pip install matplotlib进行安装。

二、基本使用:

首先先看以下例子:

import matplotlib.pyplot as plt import numpy as np plt.plot(range(10),[np.random.randint(0,10) for x in range(10)])

那么就会出现以下图:
matplotlib1.png
其中plot是一个画图的函数,他的参数为plot([x],y,[fmt],data=None,**kwargs)。其中fmt可以传一个字符串,用来给这个图做一些样式修改的。默认的绘制样式是b-,也就是蓝色实体线条。比如我想将原来的图的线条改成点状,那么可以通过以下代码实现:

import matplotlib.pyplot as plt plt.plot(range(10),[np.random.randint(0,10) for x in range(10)],":")

2.1. 折线图类型:

其中使用:代表点线,是matplotlib的一个缩写。这些缩写还有以下的:

字符 类型 字符 类型
‘-’ 实线 ‘–’ 虚线
‘-.’ 虚点线 ‘:’ 点线
‘.’ ‘,’ 像素点
‘o’ 圆点 ‘v’ 下三角点
‘^’ 上三角点 ‘<’ 左三角点
‘>’ 右三角点 ‘1’ 下三叉点
‘2’ 上三叉点 ‘3’ 左三叉点
‘4’ 右三叉点 ‘s’ 正方点
‘p’ 五角点 ‘*’ 星形点
‘h’ 六边形点1 ‘H’ 六边形点2
‘+’ 加号点 ‘x’ 乘号点
‘D’ 实心菱形点 ‘d’ 瘦菱形点
‘_’ 横线点

除了设置线条的形状外,我们还可以设置点的颜色。示例代码如下:

plt.plot([1,2,3,4,5],[1,2,3,4,5],'r') #将颜色线条设置成红色 plt.plot([1,2,3,4,5],[1,2,3,4,5],color='red') #将颜色设置成红色 plt.plot([1,2,3,4,5],[1,2,3,4,5],color='#000000') #将颜色设置成纯黑色 plt.plot([1,2,3,4,5],[1,2,3,4,5],color=(0,0,0,0)) #将颜色设置成纯黑色

给线条设置颜色总体来说有三种方式,第一种是使用颜色名称(rred的缩写)的形式,第二种是使用十六进制的方式,第三种是使用RGBRGBA的方式。如果使用的是颜色名称,那么可以和线的形状写在同一个字符串中。比如使用红色的五角点,那么可以使用如下的方式实现:

plt.plot([1,2,3,4,5],[1,2,3,4,5],'rp') #将颜色线条设置成红色

2.2. 线条颜色:

其中可以表示颜色的缩写字符有如下:

字符 颜色
‘b’ 蓝色,blue
‘g’ 绿色,green
‘r’ 红色,red
‘c’ 青色,cyan
‘m’ 品红,magenta
‘y’ 黄色,yellow
‘k’ 黑色,black
‘w’ 白色,white

三、设置图的信息:

现在我们添加图后,没有指定x轴代表什么,y轴代表什么,以及这个图的标题是什么。因此以下我们通过一些属性来设置一下。

3.1. 设置线条样式:

  1. 使用plot方法:plot方法就是用来绘制线条的,因此可以在绘制的时候就把线条相关的样式通过参数传进去。示例代码如下:
    plt.plot(x,y,linewidth=2)
  2. 通过Line2D对象来设置:plot方法会返回一个装有Line2D对象的列表,比如lines=plt.plot(x1,y1,x2,y2)因为绘制了两根线条,因此lines中会有两个2D对象。而如果plot只绘制一根线条,那么lines中就只有一个Line2D对象。拿到这个Line2D对象后就可以通过set_属性名设置线条的样式了:
    lines = plt.plot(x,y) line = lines[0] line.set_aa(False) #关掉反锯齿 line.set_alpha(0.5) #设置0.5的透明度
  3. 使用plt.setp来设置:setp的好处是一次性可以设置多根线条的样式。示例代码如下:
    lines = plt.plot(x,y) plt.setp(lines,linewidth=10,alpha=0.5)
  4. 更多Line2D属性:
    Line2D属性表.png

3.2. 设置轴和标题:

  1. 设置轴名称:可以通过plt.xlabelplt.ylabel来设置x轴和y轴的的名称。示例代码如下:

    plt.plot(x,y,linewidth=10,color='red') plt.xlabel("x轴") plt.ylabel("y轴")

    默认情况下是显示不了中文的。需要设置字体。可以通过以下代码来实现:

    # 加载字体 font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc") plt.plot(x,y,linewidth=10,color='red') plt.xlabel("x轴",fontproperties=font) plt.ylabel("y轴",fontproperties=font)

    加载字体的时候,可以到C:\Windows\Fonts中找你喜欢的并且可以显示中文的字体。找到字体后,还需要找到字体的真实名称。方法是右键->属性->安全->对象名称:
    matplotlib3.png

  2. 设置标题:可以通过plt.title方法来实现。示例代码如下:

    font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc") plt.title("sin函数",fontproperties=font)
  3. 设置x轴和y轴的刻度:之前我们画的图,x轴和y轴的刻度都是matplotlib自动生成的。如果想要在生成图的时候手动的指定,那么可以通过plt.xticksplt.yticks来实现:

    plt.xticks(range(0,20,2)) #在x轴上的刻度是0,2,4,6...20

    以上会把那个刻度显示在x轴上。如果想要显示字符串类型,那么可以再构造一个数组,这个数组的长度必须和x轴刻度的长度保持一致。然后传给xticks的第二个参数。示例代码如下:

    _x = range(0,20,2) _xticks = ["%d坐标"%i for i in _x] plt.xticks(_x,_xticks,fontproperties=font) #在x轴上的刻度是0坐标,2坐标...20坐标

    matplotlib4.png
    同样y轴的刻度设置也是一样的。示例代码如下:

    _y = np.arange(-1,1,0.25) _yticks = ["%.2f点"%i for i in _y] plt.yticks(_y,_yticks,fontproperties=font)

    效果图如下:
    matplotlib5.png

    复仇者联盟电影票房案例:

    avenger = [17974.4,50918.4,30033.0,40329.1,52330.2,19833.3,11902.0,24322.6,47521.8,32262.0,22841.9,12938.7,4835.1,3118.1,2570.9,2267.9,1902.8,2548.9,5046.6,3600.8] plt.figure(figsize=(15,5)) plt.plot(avenger,marker="o") font.set_size(10) plt.xticks(range(20),["第%d天"%x for x in range(1,21)],fontproperties=font) plt.xlabel("天数",fontproperties=font) plt.ylabel("票房数(万)",fontproperties=font) plt.grid()

    复仇者联盟票房折线图.png

3.3. 设置marker:

有时候,我们想要在一些关键点上重点标记出来。那么我们可以通过设置marker来实现。示例代码如下:

x = np.linspace(0,20) y = np.sin(x) plt.plot(x,y,marker="o")

matplotlib2.png
我们设置了markero,这样就是会在(x,y)的坐标点上显示出来,并且显示的是圆点。其中o跟之前的线条样式的简写是一样的。另外,还可以通过markerfacecolor属性和markersize来指定标记点的颜色和大小。示例代码如下:

# 以下设置标记点的颜色为黑色,尺寸为10 plt.plot(x,y,marker="o",markerfacecolor='k',markersize=10)

3.4. 设置注释文本:

有时候需要在图形中的某个点标记或者注释一下。那么我们可以使用plt.annotate(text,xy,xytext,arrowprops={})来实现,其中text是注释的文本,xy是需要注释的点的坐标,xytext是注释文本的坐标,arrowprops是箭头的样式属性。示例代码如下:

ax = plt.subplot(111) x = np.arange(0.0, 5.0, 0.01) y = np.cos(2*np.pi*t) line, = plt.plot(x, y,linewidth=2) plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5), arrowprops=dict(facecolor='black',shrink=0.05), ) plt.ylim(-2, 2) plt.show()

3.5. 设置图形样式:

如果想要调整图片的大小和像素,可以通过plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)来实现。
其中num是图的编号,figsize的单位是英寸,dpi是每英寸的像素点,facecolor是图片背景颜色,edgecolor是边框颜色,frameon代表是否绘制画板。
示例代码如下:

plt.figure(figsize=(20,8),dpi=80) # 其他的绘制图形的代码

我们也可以使用grid方法,来显示图片的网格:

plt.plot(x,y,color="r") plt.grid()

matplotlib9.png

3.6. 保存图片:

可以调用plt.savefig(path)来保存当前的图片。示例代码如下:

plt.savefig("./abc.png")

四、绘制多个图:

绘制多个图有两种形式,第一种形式是在一张图中绘制多跟线条,第二种形式是绘制多个子图形。以下分别进行讲解。

4.1. 绘制多根折线:

绘制多根线条,只要准备好坐标,重新使用plt.plot绘制即可。示例代码如下:

from matplotlib import font_manager x = np.linspace(0,20) y = np.sin(x) z = np.cos(x) font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc") plt.xlabel("x轴",fontproperties=font) plt.ylabel("y轴",fontproperties=font) _x = range(0,20,2) _xticks = ["%s点"%i for i in _x] plt.xticks(range(0,20,2),_xticks,fontproperties=font,rotation=45) _y = list(np.range(-1,1,0.25)) _yticks = ["%.2f点"%i for i in _y] plt.yticks(_y,_yticks,fontproperties=font) plt.plot(x,y) plt.plot(x,z)

示例图如下:
matplotlib7.png

4.2. 绘制多个子图:

绘制子图的时候,我们可以使用plt.subplotplt.subplots来实现。示例代码如下:

plt.subplot(221) plt.plot(np.arange(10),c='r') plt.subplot(222) plt.plot(np.sin(np.arange(10)),c='b') plt.subplot(223) plt.plot(np.cos(np.arange(10)),c='y') plt.subplot(224) plt.plot(np.tan(np.arange(10)),c='g')

效果图如下:
subplot1.png
其中subplot中的211212分别代表的意思是,第一个数表示这个大图中总共有2行,第二个数表示总共有1列,然后第三个数表示当前绘制第几个图。

也可以使用fig,axs=plt.subplots(rows,cols,*args,**kwargs)来绘制多个图形,返回值是一个元组,其中的fig参数是figure对象,axsaxes对象的array。示例代码如下:

figure,axes = plt.subplots(2,2) axes[0,0].plot(np.sin(np.arange(10)),c='r') axes[0,1].plot(np.cos(np.arange(10)),c='b') axes[1,0].plot(np.tan(np.arange(10)),c='y') axes[1,1].plot(np.arange(10),c='g')

效果图跟之前使用plt.subplot一样。另外使用subplotsubplots都可以传递sharex/sharey参数,这两个参数表示是否需要共享X轴和Y轴。示例代码如下:

figure,axes = plt.subplots(2,2,sharex=True,sharey=True) axes[0,0].plot(np.sin(np.arange(10)),c='r') axes[0,1].plot(np.cos(np.arange(10)),c='b') axes[1,0].plot(np.tan(np.arange(10)),c='y') axes[1,1].plot(np.arange(10),c='g')

subplot2.png

4.3. 风格设置:

matplotlib图片默认内置了几种风格。我们可以通过plt.style.available来查看内置的所有风格:

['bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark-palette', 'seaborn-dark', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'seaborn', 'Solarize_Light2', 'tableau-colorblind10', '_classic_test']

在绘制的,可以使用plt.style.use方法来使用不同的风格。示例代码如下:

plt.style.use("dark_background")

五、官方文档介绍:

  1. plt.plot使用详解:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot
  2. matplotlib.pyplot使用详解:https://matplotlib.org/api/pyplot_summary.html
  3. matplotlib内置的样式:https://tonysyu.github.io/raw_content/matplotlib-style-gallery/gallery.html

1576人已阅读,今天你学习了吗?

添加新回复
目录