颜色信息查看:https://matplotlib.org/gallery/color/color_demo.html
一些常用图像的绘制代码:25个常用Matplotlib图的Python代码,收藏了!
一.介绍
1.功能与特性:
Matplotlib是建立在NumPy数组基础上的数据可视化程序库,用于在Python中进行静态图像绘制
对于大型数组也能提供良好的性能,与NumPy一起提供了1种有效的MatLab开源替代方案
最初被设计用于完善SciPy的生态环境,虽然起源于模仿Matlab图形命令,但可以以Pythonic和面向对象的方式使用
也可与图形工具包(如PyQt和wxPython)一起使用
具有良好的操作系统兼容性和图形显示底层接口兼容性
2.Matplotlib的三重结构:
https://www.cnblogs.com/hello-/articles/8879925.html
1.容器层:主要用于放置其他对象
(1)Canvas:位于最底层的系统层;充当画板的角色,即放置Figure的容器
通常情况下,不需要对Canvas特别声明,但需要在其他模块如PyQt中调用Matplotlib模块绘图时,就需要先声明Canvas
(2)Figure:Canvas上的第1层,也是需要用户操作的应用层的第1层;充当画布的角色
可通过plt.figure()设置属性
(3)Axes:应用层的第2层;充当画布上的坐标系/绘图区的角色,包含1个图像
注意与Axis的区别
#注意:
1.1个figure可包含多个axes,但1个axes只能属于1个figure
2.1个axes可包含多个axis(坐标轴):包含n个即为n维坐标系
#########################################################
2.辅助显示层: Axes内图像以外的所有内容,主要用于使图像更容易理解
(1)facecolor:Axes外观
(2)spines:边框线
(3)axis:坐标轴,包含大小限制/刻度/刻度标签
axis label:坐标轴名称
tick:坐标轴刻度
tick label:坐标轴刻度标签
(4)grid:网格线
(5)legend:图例
(6)title:标题
#注意:
1.该层可通过set_axis_off()或set_frame_on(False)等方法隐藏
#########################################################
3.图像层:Axes内通过各种函数绘制的图像
(1)plot:线形图
(2)scatter:散点图
(3)bar:柱状图
(4)histogram:直方图
(5)pie:饼图
#########################################################
4.总结:
(1)Canvas位于最底层,用户一般接触不到
(2)Figure建立在Canvas之上
(3)Axes建立在Figure之上
(4)辅助信息层/图像层都建立在Axes之上
3.3种绘图方式
(1)pyplot:
即通过matplotlib.pyplot调用方法.matplotlib.pyplot是对模块中内容的1个高级封装,可以看成是整个模块的调度中心.这是1个风格和MATLAB
相似的函数集合,每个函数都会对画布/图像作出相应的改变,从而让使用者可以像使用MATLAB一样简单直观地使用matplotlib.但底层定制能力不足.
这是使用最多的方式
(2)pylab:
即通过Pylab调用方法.Pylab将Matplotlib和Numpy封装到了一起,环境最接近MATLAB.但设计哲学和Matplotlib不一致,故不推荐使用
(3)面向对象:
即通过各种对象调用方法.这是最接近Matplotlib底层的方式,难度较大但定制能力最强
4.安装
(1)Windows平台:
python -m pip install -U pip setuptools
python -m pip install matplotlib
(2)Linux平台:
#Debian/Ubuntu:
sudo apt-get install python-matplotlib
#Fedora/Redhat:
sudo yum install python-matplotlib
(3)MacOS平台:
sudo python -mpip install matplotlib
#检查是否安装了matplotlib
$ python -m pip list | grep matplotlib
5.导入:
import matplotlib as mpl
#通常导入matplotlib.pyplot即可:
import matplotlib.pyplot as plt
二.属性配置(Matplotlib Resource Configurations;Matplotlibrc)
https://blog.csdn.net/qq_27825451/article/details/82732675
1.通过配置文件进行配置
配置文件参考:https://matplotlib.org/tutorials/introductory/customizing.html
属性参考:https://matplotlib.org/api/matplotlib_configuration_api.html?highlight=rc#matplotlib.rc
(1)配置文件的3个级别:
配置文件:matplotlibrc
配置文件分为不同级别:默认使用全局的默认配置,如果希望不同项目使用不同配置,需要用到局部配置文件
系统按照 当前目录-->用户级-->安装级 的顺序查找配置文件
#具体级别:
1.当前工作目录
可为代码运行的当前目录的当前项目定制配置
默认使用全局的默认配置,如果要定制配置需要自行创建
2.用户级配置文件
为用户目录下的.matplotlib\matplotlibrc文件,如C:\Users\1234\.matplotlib\matplotlibrc
可能没有,这时需要自行创建
3.安装级配置文件
简装Matplotlib时在安装路径下的配置文件,为Python的site-packages\matplotlib\mpl-data\matplotlibrc文件
如C:\Users\1234\AppData\Roaming\Python\Python37\site-packages\matplotlib\mpl-data\matplotlibrc
(2)相关命令:
matplotlib.get_configdir():返回配置文件所在的路径(不包括文件名本身)
matplotlib.getbackend():返回Matplotlib的后端;默认为TkAgg
matplotlib.get_cachedir():返回缓存所在目录
matplotlib.get_data_path():返回数据路径;即安装级配置文件所在路径
matplotlib.get_home():返回用户目录
#该命令在接下来的版本中将被删除,使用以下命令进行替代:
os.path.expanduser('~')
matplotlib.matplotlib_fname():查看所有配置文件的路径
#实例:
>>> matplotlib.get_configdir()
'C:\\Users\\1234\\.matplotlib'
>>> matplotlib.get_backend()
'TkAgg'
>>> matplotlib.get_cachedir()
'C:\\Users\\1234\\.matplotlib'
>>> matplotlib.get_data_path()
'C:\\Users\\1234\\AppData\\Roaming\\Python\\Python37\\site-packages\\matplotlib\\mpl-data'
>>> matplotlib.get_home()
__main__:1: MatplotlibDeprecationWarning:
The get_home function was deprecated in Matplotlib 3.2 and will be removed two minor releases later. Use os.path.expanduser('~') instead.
'C:\\Users\\1234'
>>> matplotlib.matplotlib_fname()
'C:\\Users\\1234\\AppData\\Roaming\\Python\\Python37\\site-packages\\matplotlib\\mpl-data\\matplotlibrc'
(3)配置文件的格式:
## ***************************************************************************
## * <配置对象> *
## ***************************************************************************
[## <注释>]
# <属性1> :<属性值> [##<注释>]
# <属性2> :<属性值> [##<注释>]
... ... ...
#实例:
## ***************************************************************************
## * PATCHES *
## ***************************************************************************
## Patches are graphical objects that fill 2D space, like polygons or circles.
## See https://matplotlib.org/api/artist_api.html#module-matplotlib.patches
## for more information on patch properties.
#patch.linewidth : 1 ## edge width in points.
#patch.facecolor : C0
#patch.edgecolor : black ## if forced, or patch is not filled
#patch.force_edgecolor : False ## True to always use edgecolor
#patch.antialiased : True ## render patches in antialiased (no jaggies)
2.修改属性字典:
所有rc参数都储存在matplotlib.rcParams这个类字典的变量中
该变量对Matplotlib是全局的,且可以直接修改
mpl.rcParams["<obj>.<prop>"]=<value>
matplotlib.rcParams["<obj>.<prop>"]=<value>
#注意:和查看时不同,此处是方括号,且为rcParams
#参数说明:
obj.prop:要设置的属性(某对象的某属性);为str
value:属性值
#实例:
>>> import matplotlib
>>> from matplotlib.pylab import mpl
>>> mpl.rcParams["lines.color"]="r"
>>> matplotlib.rcParams["lines.color"]="b"
3.通过函数进行动态配置
(1)查看配置:
matplotlib.rcParams.keys():查看所有rc参数及默认值
#以下4种方法是等价的:均用于查看当前rc配置
>>> import matplotlib
>>> from matplotlib.pylab import mpl
>>> mpl.rc_params()
RcParams({'_internal.classic_mode': False,
'agg.path.chunksize': 0,
...#中间部分在此省略
'ytick.minor.width': 0.6,
'ytick.right': False})
>>> matplotlib.rc_params()
#结果同上
>>> matplotlib.rcParamsDefault
#结果同上
>>> matplotlib.rcParams
#结果同上
(3)通过rc()进行配置:
mpl.rc("<obj>",<prop1>,<value1>[,<prop2>,<value2>...])
pyplot.rc("<obj>",<prop1>,<value1>[,<prop2>,<value2>...])
matplotlib.rc("<obj>",<prop1>,<value1>[,<prop2>,<value2>...])
#参数说明:
obj:要设置属性的对象;为str
prop:要设置的属性;非str
#相当于设置<obj>.<prop>=<value>
value:属性值
#prop和value也可写成{"<prop>":<value>},此时prop为str
#实例:
>>> import matplotlib
>>> from matplotlib.pylab import mpl
>>> from matplotlib import pyplot as plt
>>> plt.rc("lines",linewidth=2)
>>> mpl.rc("lines",linewidth=2)
>>> matplotlib.rc("lines",linewidth=2,color="g")
(4)其他相关函数:
mpl.rcdefaults():恢复默认设置
mpl.cr_file():从已有文件更新
4.配置对象及属性
(1)配置对象:
BACKENDS
LINES:线条颜色,线条风格,线条宽度,线条标记风格等
PATCHES:填充2D空间的图形对象,包括多边形和圆
HATCHES
BOXPLOT
FONT:字体类别,字体风格,字体粗细,字体大小等
TEXT:文本颜色,LaTex渲染文本等
LaTeX
AXES:坐标轴的背景颜色,坐标轴的边缘颜色,刻度线的大小,刻度标签的字体大小等
DATES
TICKS:坐标轴的主次要刻度线的大小,宽度,颜色,刻度标签大小等
GRIDS:网格颜色,网格线条风格,网格线条宽度,网格透明度
LEGEND:图例的文本大小,阴影,图例线框风格等
FIGURE:画布标题大小,画布标题粗细,画布像素(dpi), 画布背景颜色,边缘颜色等
IMAGES
CONTOUR PLOTS
ERRORBAR PLOTS
HISTOGRAM PLOTS
SCATTER PLOTS
AGG RENDERING
PATHS
SAVING FIGURES:保存画布图像的分辨率,背景颜色,边缘颜色等
INTERACTIVE KEYMAPS
ANIMATION
(2)属性:
三.其他设置
1.后端引擎:
后端概念参考:https://www.cnblogs.com/suntp/p/6519386.html
2.语言与字体
Matplotlib的pyplot支持Unicode,但默认使用英文,故需要自行设置:
#方法1:更灵活,不污染全局
1.将字体文件放在当前执行的代码文件中:
<font1>=matplotlib.font_manager.FontProperties(fname="<path\file>")
#参数说明:
fname:字体库路径及文件名
#路径通常为C:\Windows\Fonts\
font1:返回字体对象
2.然后利于fontproperties属性在要使用中文的位置进行设置
3.如果是系统自带的字体,直接设置fontproperties="<字体>"
#实例:
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
>>> a=[-15,-10,-5,20,25,30]
>>> b=[-5,-4,-3,6,7,8]
>>> plt.xlabel('x轴',fontproperties='STLiti')#华文隶书
>>> plt.ylabel('y轴',fontproperties='Microsoft YaHei')#微软雅黑
>>> plt.title('标题',fontproperties='Microsoft JhengHei')#微软正黑
>>> plt.plot(a,b)
>>> plt.show()
#结果:见下图1
>>> zhfont1=matplotlib.font_manager.FontProperties(fname="SimHei.ttf")
>>> x=np.arange(1,11)
>>> y=2*x+5
>>> plt.title("测试",fontproperties=zhfont1)
>>> plt.xlabel("x 轴",fontproperties=zhfont1)
>>> plt.ylabel("y 轴",fontproperties=zhfont1)
>>> plt.plot(x,y)
>>> plt.show()
#结果:见下图2
#方法2:简单方便
mpl.rcParams["font.sans-serif"]=["<字体>"]
#也可以省略[ ](为什么这里就可以加[]???)
#实例:
from matplotlib.pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
#方法3:不推荐,会破坏原本的安装结构,且并非所有项目都需要使用中文
1.修改matplotlibrc文件:
需要先删除要修改的属性前的"#",再进行修改
#实例:
font.family : Microsoft YaHei
font.sans-serif : Microsoft YaHei, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
2.删除缓存:
>>> import matplotlib
>>> matplotlib.get_cachedir()
#删除结果目录中的所有文件
3.重启Python
如果有希腊字母,使用"$...$",如plt.xlabel(u'$ω$')
3.显示负号:
#方法1:
from matplotlib.pylab import mpl
mpl.rcParams['axes.unicode_minus']=False
#方法2:修改全局的matplotlibrc文件
1.修改文件
#修改为:
axes.unicode_minus : False ## use unicode for the minus symbol
2.删除缓存
>>> import matplotlib
>>> matplotlib.get_cachedir()
#删除结果目录中的所有文件
3.重启Python
4.字体:
在C:\Windows\Fonts中找到字体文件,发现显示的是字体名
将字体文件复制到matplotlib的ttf文件夹中,如:
C:\Users\1234\AppData\Roaming\Python\Python37\site-packages\matplotlib\mpl-data\fonts\ttf
发现本质上C:\Windows\Font中的字体文件就是.ttc/.ttf字体文件
- Windows常见字体:
- Mac常见字体: