python外卷(13)-matplotlib简易教程

matplotlib简单使用

  • 0.matplotlib的安装
  • 1.导入相关库
  • 2.画布初始化
    • 2.1 隐式创建
    • 2.2 显示创建
    • 2.3 设置画布大小
    • 2.4 plt.figure()常用参数
  • 3.plt.plot() ,scatter(),bar()图像类型(曲线、散点)
  • 4.plt.show() 显示图像
  • 5.简单绘制小demo
  • 6.plt.plot()--颜色,粗细,线形,图例
  • 7.plt.title()设置图像的标题
    • 7.1 极简设置
    • 7.2 plt.title()常用的参数
  • 8.plt.savefig()存图
  • 9.plt.xxx常用方法待更新
    • 9.1 plt.text() 图中添加文字
    • 9.2 plt.xlim() 设置坐标轴的位置
  • 10.错误信息
    • 10.1 RuntimeError: Invalid DISPLAY variable

Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。

matplotlib绘图三个核心概念–figure(画布)、axes(坐标系)、axis(坐标轴)

画图首先需要初始化(创建)一张画布,然后再创建不同的坐标系,在各自的坐标系内绘制相应的图线

绘图步骤

导入相关库->初始化画布->准备绘图数据->将数据添加到坐标系中->显示图像

注:可以绘制list,也可以绘制Numpy数组

0.matplotlib的安装

Linux 终端安装

pip install matplotlib

1.导入相关库

import numpy as np
import matplotlib.pyplot as plt

2.画布初始化

2.1 隐式创建

第一次调用plT.xxx(诸如:plt.plot(x,y))时,系统自动创建一个figure对象,并在figure上创建一个axes坐标系,基于此进行绘图操作(隐式初始化只能绘制一张图)

x=[1,2,5,7]
y=[4,9,6,8]
plt.plot(x,y)
plt.show()

2.2 显示创建

手动创建一个figure对象,在画布中添加坐标系axes

figure = plt.figure()
axes1 = figure.add_subplot(2,1,1)
Axes2= figure.add_subplot(2,1,2)

2.3 设置画布大小

figure = plt.figure(figsize=(xinch,yinch))

2.4 plt.figure()常用参数

画布属性(数量,大小)通过画布初始化方法设置,在初始化的时候填写响应的参数。

plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=, clear=False, **kwargs

0.num–a unique identifier for the figure (int or str)
1.figsize–画布大小(default: [6.4, 4.8] in inches.)
2.dpi=None–The resolution of the figure in dots-per-inch.
3.facecolor–The background color
4.edgecolor–The border color
5.frameon–If False, suppress drawing the figure frame.
6.FigureClass=,
7.clear=False, If True and the figure already exists, then it is cleared.

3.plt.plot() ,scatter(),bar()图像类型(曲线、散点)

隐式创建时,用plt.plot()在默认坐标系中添加数据

显示创建时,用axes1.plot()在对应的坐标系中添加绘制数据

注:.plot()用于绘制曲线图,绘制其他类型的图像可以将其替换成对应的方法,可选绘制方法如下所示:

0.曲线图:plt.plot()–最基本
1.散点图:plt.scatter()
2.柱状图:plt.bar()
3.等高线图:plt.contourf()
4.在等高线图中增加label:plt.clabel()
5.矩阵画图:plt.imshow()
6.在随机矩阵图中增加colorbar:plt.colorbar()
7.直方图
plt.hist( data,bin)
https://www.jianshu.com/p/f2f75754d4b3

4.plt.show() 显示图像

plt.show()

5.简单绘制小demo

import numpy as np
import matplotlib.pyplot as plt
figure = plt.figure()
axes1 = figure.add_subplot(2,1,1)	# 2*1 的 第2个图
axes2= figure.add_subplot(2,1,2)  # 2*1 的 第2个图
# axes1 = figure.add_subplot(2,2,1) 2*2 的 第1个图
x,y=[1,3,5,7],[4,9,6,8]
a,b=[1,2,4,5],[8,4,6,2]
axes1.plot(x,y)
Axes2.plor(a,b)
plot.show()

6.plt.plot()–颜色,粗细,线形,图例

plt.plot(x,y,color=“deeppink”,linewidth=2,linestyle=’:’,label=‘Jay income’, marker=‘o’)

参数含义:
0–x,y :array 表示 x 轴与 y 轴对应的数据
1–color :string 表示折线的颜色; None
2–label :string 数据图例内容:label=‘实际数据’ None,配合plt.legend()使用
3–linestyle :string 表示折线的类型;
4–marker :string 表示折线上数据点处的类型; None
5–linewidth :数值 线条粗细:linewidth=1.=5.=0.3 1
6–alpha :0~1之间的小数 表示点的透明度; None

注:label:配合 plt.legend()使用,legend(…, fontsize=20),可以设置图例的字号大小
https://www.cnblogs.com/shuaishuaidefeizhu/p/11361220.html

7.plt.title()设置图像的标题

7.1 极简设置

1.隐式初始化(画布)图像标题设置

plt.title(‘Interesting Graph’,fontsize=‘large’)

2.显式初始化(子图/坐标系)图像标题设置

ax.set_title(‘title test’,fontsize=12,color=‘r’)

7.2 plt.title()常用的参数

0.fontsize–设置字体大小,默认12,可选参数 [‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’,‘x-large’, ‘xx-large’]
1.fontweight–设置字体粗细,可选参数 [‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’]
2.fontstyle–设置字体类型,可选参数[ ‘normal’ | ‘italic’ | ‘oblique’ ],italic斜体,oblique倾斜
3.verticalalignment–设置水平对齐方式 ,可选参数 : ‘center’ , ‘top’ , ‘bottom’ ,‘baseline’
4.horizontalalignment–设置垂直对齐方式,可选参数:left,right,center
5.rotation–(旋转角度)可选参数为:vertical,horizontal 也可以为数字
6.alpha–透明度,参数值0至1之间
7.backgroundcolor–标题背景颜色
8.bbox–给标题增加外框 ,常用参数如下:
9.boxstyle–方框外形
10.facecolor–(简写fc)背景颜色
11.edgecolor–(简写ec)边框线条颜色
12.edgewidth–边框线条大小

参考链接–https://blog.csdn.net/helunqu2017/article/details/78659490/

8.plt.savefig()存图

将绘制图像以png的形式存在当前文件夹下:

plt.savefig(“test.png”)

通过函数参数控制文件的存储格式,存储路径

savefig(fname, dpi=None, facecolor=’w’, edgecolor=’w’,
orientation=’portrait’, papertype=None, format=None,
transparent=False, bbox_inches=None, pad_inches=0.1,
frameon=None)

0–fname:A string containing a path to a filename, or a Python file-like object, or possibly some backend-dependent object such as PdfPages.(保存图片位置与路径的字符串)
1–dpi: None | scalar > 0 | ‘figure’
2–facecolor, edgecolor:(?)
3–orientation: ‘landscape’ | ‘portrait’
4–papertype:
5–format:(png, pdf, ps, eps and svg)
6–transparent:
7–frameon:
8–bbox_inches:
9–pad_inches:
10–bbox_extra_artists:

plt.show() 是以图片阻塞的方式显示图片,只有关掉显示窗口,代码才会继续运行。可以选择将图片保存下来(记得设置容易识别的文件名)查看,来保障程序运行的流畅性,

注:存完图关闭画布,防止内存占满

plt.close()

过多画布占内存报错

RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface (matplotlib.pyplot.figure) are retained until explicitly closed and may consume too much memory. (To control this warning, see the rcParam figure.max_open_warning).
max_open_warning, RuntimeWarning)

9.plt.xxx常用方法待更新

9.1 plt.text() 图中添加文字

plt.text(x, y, s, fontdict=None, withdash=False, **kwargs)

可以用来给线上的sian打标签/标注

x y :scalars 放置text的位置,途中的横纵坐标位置
s :str 要写的内容text
fontdict : dictionary, optional, default: None 一个定义s格式的dict
withdash : boolean, optional, default: False。如果True则创建一个 TextWithDash实例。
color 控制文字颜色

其他参数参考博文:https://blog.csdn.net/The_Time_Runner/article/details/89927708

9.2 plt.xlim() 设置坐标轴的位置

画布坐标轴设置

plt.xlim((-5, 5))
plt.ylim((0,80))

子图坐标轴配置

Axes.set_xlim((-5,5))
Axes.set_ylim((0,80))


legend 图例
grid 背景网格
tick 刻度
axis label 坐标轴名称
tick label 刻度名称
major tick label 主刻度标签
line 线style 线条样式
marker 点标记
font 字体相关
annotate标注文字:https://blog.csdn.net/helunqu2017/article/details/78659490/

问题1:横纵坐标等比例
plt.axis(“equal”)
Plt.axis(“scaled”) # 坐标值标的很小,曲线出描绘框架

10.错误信息

10.1 RuntimeError: Invalid DISPLAY variable

在远端服务器上运行时报错,本地运行并没有问题

原因:matplotlib的默认backend是TkAgg,而FltAgg、GTK、GTKCairo、TkAgg、Wx和WxAgg这几个backend都要求有GUI图形界面,所以在ssh操作的时候会报错。

解决:在导入matplotlib的时候指定不需要GUI的backend(Agg、Cairo、PS、PDF和SVG)。

import matplotlib.pyplot as plt
plt.switch_backend(‘agg’)

参考资料
https://baijiahao.baidu.com/s?id=1659039367066798557&wfr=spider&for=pc
https://www.kesci.com/home/column/5b87a78131902f000f668549
https://blog.csdn.net/gdkyxy2013/article/details/79585922

你可能感兴趣的:(Python外卷)