【语言工具】Python Matplotlib 一些概念及用法汇总

matplotlib实际上是一套Python面向对象的绘图库,它所绘制的图表中的每个绘图元素,例如线条Line2D、文字Text、刻度等在内存中都有一个对象与之对应。

matplotlib默认参数的配置处理:https://blog.csdn.net/lanchunhui/article/details/52327042

matplotlib.pyplot模块为matplotlib提供的一套和MATLAB类似的绘图API,以方便快速绘图。将众多绘图对象所构成的复杂结构隐藏在这套API内部。我们只需要调用pyplot模块所提供的函数就可以实现快速绘图以及设置图表的各种细节。

matplotlib.pyplot模块对外提供函数式的接口,其内部实际保存了当前图表以及当前子图等信息。在pyplot模块中,许多函数都是对当前的Figure或Axes对象进行处理,比如说:    plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。

在matplotlib.pyplot模块中,

Figure-Axes/Subplot - Axis的关系:


Figure:

Figure就是画板,是画纸Axes/Subplot的载体。


具体画画是在画纸Axes/Subplot上操作的,即使只有一个子图,也可以生成subplot,然后对subplot对象进行各种轴、刻度、标注的设定。


subplot与Axes的区别:

subplot用法:ax1 = fig.add_subplot(235),23代表生成2行3列的图像,5代表从上到下,从左到右数,获取第5个子图的对象。



Axes用法:ax3=fig.add_axes([0.1, 0.1, 0.4, 0.9]), 前两个数字0.1 0.1 代表相对于fig的原始坐标的位置,0.4,0.9代表横纵坐标轴分别从原始位置出发,有多长的轴距。Axes可以理解为Axis的轴的集合,所以,也可以对应得到很多轴Axis的属性,如标注等。ax3即获得了一个轴域(由横纵坐标轴得到的区域, 也勉强叫做子图)


subplot与Axes的区别:

两者你中有我,我中有你,生成subplot的时候,必然生成axes,画axes也相当于是生成了一个subplot

add_supplot简单明了,而add_axes生成子图方式更加灵活,可以自由控制子图的位置(相对位置,很方便),可以实现重叠。


两种作图方式:

以调用plt函数库为代表的函数式编程思想,直接调用plot, xlim函数实现画图功能:



以调用sub_plot/add_axies为代表的面向对象编程思想,可以调用子图的.plot, set_xlim方法:



重要概念:


整体的设置:

https://absentm.github.io/2017/03/18/Python-matplotlib-%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96/

获取当前图表:fig=plt.gcf() # Get Current Figure, 查看源码,返回一个figure() 画板对象。

获取当前子图:ax=plt.gca() # Get Current Axes,看源码, 返回一个axes画纸/子图对象。

获取对象的各种属性: plt.getp(plt.gca(), "lines"),前面是对象,后面时属性

======================================================

1 创建一个画板,并获得子图

函数编程方式1:

plt.figure(num=1, figsize=(8,4), dpi=300), 创建制定编号,大小,分辨率的画板,dpi缺省值80。注意这里只是显示时看到的dpi,实际save图像的时候,最终的图像的分辨率为对应的savefig指定的分辨率。

# savefig(dpi=300)的默认分辨率,可以在matplotlib的配置文件中设置。设置配置文件方式如下:

matplotlib.rcParams["savefig.dpi"]100

面向对象方式二:

fig=plt.figure()

ax=fig.add_subplot(111)

注意,以下均以函数编程方式讲解,特殊地方可以调用plt.gca() 获得子图对象,按子图对象单独处理

2 通过调用plot函数在当前的绘图对象中进行绘图

plt.plot(years, price, 'b*')#,label="$cos(x^2)$")
plt.plot(years, price, 'r')
Note:
1. 第一句将x,y数组传递给plot
2.通过第三个参数"b--"指定曲线的颜色和线型,这个参数称为格式化参数,它能够通过一些易记的符号快速指定曲线的样式。其中b表示蓝色,"--"表示线型为虚线。
3. 用关键字参数指定各种属性:label : 给所绘制的曲线一个名字,此名字在图示/图例(legend)中显示。只要在字符串前后添加"$"符号,matplotlib就会使用其内嵌的latex引擎绘制的数学公式。color : 指定曲线的颜色linewidth : 指定曲线的宽度
具体参见【附录 - matplotlib中的作图参数】

3 设置绘图对象的各个属性:

    plt.xlabel("years(+2000)")   #设置X轴的文字
    plt.ylabel("housing average price(*2000 yuan)")
    plt.ylim(0, 15)    #设置Y轴的范围
    plt.title('line_regression & gradient decrease')    #设置图表的标题

    plt.legend()    #显示图示

通过配置文件方式设置xlabel和ylabel显示的默认大小

import matplotlib
matplotlib.rc('xtick', labelsize=18)

matplotlib.rc('ytick', labelsize=18)

4.最后调用plt.show()显示出我们创建的所有绘图对象。

Matplotlib 里的常用类的包含关系为 Figure -> Axes -> (Line2D, Text, etc.)一个Figure对象可以包含多个子图(Axes),在matplotlib中用Axes对象表示一个绘图区域,可以理解为子图。

plt.show()

5. 清空plt绘制的内容

plt.cla()
plt.close(0)# 关闭图 0

plt.close('all') 关闭所有图

6. 图形保存和输出设置

可以调用plt.savefig()将当前的Figure对象保存成图像文件,图像格式由图像文件的扩展名决定。下面的程序将当前的图表保存为“test.png”,并且通过dpi参数指定图像的分辨率为 120,因此输出图像的宽度为“8X120 = 960”个像素。
plt.savefig("test.png",dpi=120)
也可以通过show()出来的图形界面手动保存和设置
matplotlib中绘制完成图形之后通过show()展示出来,我们还可以通过图形界面中的工具栏对其进行设置和保存
matplotlib修改图片大小:图形界面下方工具栏可以设置图形上下左右的边距
如果想在跑程序外部查看图片,可以这样:
plt.savefig('/tmp/1.png')
subprocess.run('xdg-open /tmp/1.png', shell=True)


7. 绘制多图表
如果需要同时绘制多幅图表,可以给figure()传递一个整数参数指定Figure对象的序号,如果序号所指定的Figure对象已经存在,将不创建新的对象,而只是让它成为当前的Figure对象。
import numpy as np
import matplotlib.pyplot as plt 
plt.figure(1) # 创建图表1
plt.figure(2) # 创建图表2
ax1 = plt.subplot(211) # 在图表2中创建子图1
ax2 = plt.subplot(212) # 在图表2中创建子图2
x = np.linspace(0, 3, 100)
for i in xrange(5):
    plt.figure(1)  #选择图表1
    plt.plot(x, np.exp(i*x/3))
    plt.sca(ax1)   #选择图表2的子图1
    plt.plot(x, np.sin(i*x))
    plt.sca(ax2)  # 选择图表2的子图2
    plt.plot(x, np.cos(i*x))

plt.show()


8. 绘制多子图

matplotlib.pyplot.subplots(2,3,5)

subplot将整个绘图区域等分为numRows行* numCols列个子区域,然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1。如果numRows,numCols和plotNum这三个数都小于10的话,可以把它们缩写为一个整数,例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的区域中创建一个轴对象。如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除。



9. Matplotlib中坐标轴设定:刻度线、刻度标签、坐标网格以及坐标轴标题:

刻度包括主刻度和副刻度,分别通过get_major_ticks()和get_minor_ticks()方法获得。

每个刻度线都是一 个XTick或YTick对象,它包括实际的刻度线和刻度标签。

Axis 对象提供了 get_ticklabels()和get_ticklines()方法,可以直接获得刻度标签和刻度线。

plt.plot([1,2,3],[4,5,6])
plt.show()
axis = plt.gca().xaxis
axis.get_ticklocs()#获得axis对象的刻度位置列表 # array([ 1. ,  1.5,  2. ,  2.5,  3. ]) 
axis.get_ticklabels() # 获得刻度标签列表 # axis.get_ticklabels() # 获得刻度标签列表

[x.get_text() for x in axis.get_ticklabels()]# 获得刻度的文本字符串#  [u'1.0', u'1.5', u'2.0', u'2.5', u'3.0‘]  获得X轴上表示主刻度线的列表,可看到X轴上共有10条刻度线

axis.get_ticklines() # 由于没有副刻度线,因此副刻度线列表的长度为0:

axis.get_ticklines(minor=True) # 获得副刻度线列表

plt.xticks(fontsize=16, color="red", rotation=45) # 使用pyplot模块中的xticks()能够完成X轴上刻度标签的配置:

10. 配置属性

matplotlib所绘制的图的每个组成部分都对应有一个对象,我们可以通过调用这些对象的属性设置方法set_*或者pyplot的属性设置函数setp设置其属性值。


12 配置文件




其它细节:

  • 给一些特殊点做注释,文1
  • matplotlib显示图像的同时,继续跑下面的代码的方式,文1
  • 在图表中显示中文,文1
  • 面向对象画图,即以subplot,axes的对象作图,文1
  • Matplotlib中的作图参数:颜色color、线条line_styles、点型makers,文1
  • MatPlotLib中设置坐标轴主刻度标签和次刻度标签显示,文1
  • 图像的载入和显示imread(),imshow(),文1

案例:画散点图,热度图,线图,直方图,散点-直方图,加标签,在画板中导入已有图片,图谱/热度方格图,箱线图,双坐标图,多个子图用同一个lenlegend

案例:多个图像绘制和同一个figure多个图片,设置坐标轴1,设置坐标轴2,tick 能见度,Scatter 散点图,。Bar 柱状图,Contours 等高线图,Image 图片,3D 数据,Subplot 多合一显示,Subplot 分格显示,图中图,次/多坐标轴,Animation 动画,

案例:设置背景色、确定坐标范围、画叠加图、plt.text()在图中添加文字说明,在图中plt.annotate()文本注释,plt.annotate()文本注释,移动脊柱 坐标系,plt.legend()添加图例,给特殊点做注释

案例:图像的大小设置、刻度和标注特殊设置、增加X轴与Y轴间的间隔,向右移动X轴标注一点点即可、移动刻度标注、调整图像边缘及图像间的空白间隔、子图像统一标题设置、图像中标记线和区域的绘制

绘制论文格式图片:

http://www.jb51.net/article/115168.htm

https://www.cnblogs.com/nju2014/p/5707980.html

参考文0:https://www.zhihu.com/question/51745620/answer/231113561

参考文1: http://blog.csdn.net/pipisorry/article/details/37742423


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值