matplotlib绘图三个核心概念–figure(画布)、axes(坐标系)、axis(坐标轴)
画图首先需要初始化(创建)一张画布,然后再创建不同的坐标系,在各自的坐标系内绘制相应的图线
绘图步骤
导入相关库->初始化画布->准备绘图数据->将数据添加到坐标系中->显示图像
注:可以绘制list,也可以绘制Numpy数组
Linux 终端安装
pip install matplotlib
import numpy as np
import matplotlib.pyplot as plt
第一次调用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()
手动创建一个figure对象,在画布中添加坐标系axes
figure = plt.figure()
axes1 = figure.add_subplot(2,1,1)
Axes2= figure.add_subplot(2,1,2)
figure = plt.figure(figsize=(xinch,yinch))
画布属性(数量,大小)通过画布初始化方法设置,在初始化的时候填写响应的参数。
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.
隐式创建时,用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
plt.show()
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()
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
1.隐式初始化(画布)图像标题设置
plt.title(‘Interesting Graph’,fontsize=‘large’)
2.显式初始化(子图/坐标系)图像标题设置
ax.set_title(‘title test’,fontsize=12,color=‘r’)
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/
将绘制图像以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 rcParamfigure.max_open_warning
).
max_open_warning, RuntimeWarning)
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
画布坐标轴设置
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”) # 坐标值标的很小,曲线出描绘框架
在远端服务器上运行时报错,本地运行并没有问题
原因: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