Matplotlib有两种接口,一种是matlab风格接口,一种是面向对象接口。在这里,统一使用面向对象接口。因为面向对象接口可以适应更复杂的场景,在多图之间进行切换将变得非常容易。

首先导入matplotlib:from matplotlib import pyplot as plt。plt是最常用的接口。

一. 创建图像和坐标轴

fig=plt.figure()   ---   创建图像

ax=plt.axes()   ---   创建坐标轴

在matplotlib中,可以把figure看成是一个容纳各种坐标轴,图像,文字和标签的容器,axes是一个带有刻度和标签的矩形。我们通常用变量fig表示一个图形实例,用变量ax表示一个坐标轴实例。

对于层级概念的详细介绍,可查看:https://www.jianshu.com/p/78ba36dddad8以及https://www.cnblogs.com/kallan/p/7365472.html

另外,也可以通过fig,ax=plt.subplots()命令一次性建立图像和坐标轴。

二. 设置绘图风格

plt.style.use('classic')   ---   选择经典风格

使用此命令后,其他图像绘制也都会使用这种风格。

matplotlib.rcdefaults命令恢复默认设置。

可以用plt.style.available命令查看所有可用的风格。

* 如果只需要临时更换至另一种风格,则用with plt.style.context('stylename'):

三. 显示图像

plt.show()

因为一个python session只能使用一次plt.show(),因此通常把此命令放在脚本的最后。

四. 保存图像

fig.savefig('figure_name.png')   ---   在工作文件夹中存入一个figure_name.png文件

注意:此命令必须放在plt.show()之前,否则保存的将会是空白图像。

可以通过fig.canvas.get_supported_filetypes()查看系统支持的文件格式。

五. 调整坐标轴上下限

ax.set_xlim(min,max)   ---   设置x轴上下限

ax.set_ylim(min,max)   ---   设置y轴上下限

六. 设置图像标题

ax.set_title("title_name")   ---   设置名为title_name的标题

七. 设置坐标轴标签

ax.set_xlabel("label_name")   ---   设置x轴标签

ax.set_ylabel("label_name")   ---   设置y轴标签

八. 设置图例

ax.legend([line1,line2,line3],["label1","label2","label3"],loc='upper left')   ---   给三条线分别设置图例,位置在左上角

 

九. 一次性设置坐标轴上下限,坐标轴标签和标题

ax.set(xlim=(min,max), ylim=(min,max), xlabel="label_name", ylabel="label_name", title="title_name")

十. 设置颜色条

fig.colorbar(label="label_name")   ---   此处的label为颜色条的标签

十一. 添加文字

ax.text(x,y,s)   ---   在(x,y)坐标处添加文字(s)

十二. 添加注释

ax.annotate("annotation",xy=(1,2),xycoords='axes fraction',xytext=(2,3),textcoords='axes fraction',arrowprops=dict(arrowstyle="->"))   ---   (x,y)坐标处为箭头的位置,xycoords为箭头的坐标体系,xytext为注释文字起始的坐标,textcoords为注释文字的坐标体系,arrowstyle为箭头样式

十三. 隐藏边框

一开始在想怎么去除y轴,在网上查了半天都是把坐标轴刻度去掉的那种(也就是第十四条那种),最后发现原来我要去除的是边框。。。

ax.spines["top"].set_visible(False)   ---   隐藏上边框

ax.spines["bottom"].set_visible(False)   ---   隐藏下边框

ax.spines["left"].set_visible(False)   ---   隐藏左边框

ax.spines["right"].set_visible(False)   ---   隐藏右边框

十四. 隐藏坐标轴(刻度和刻度值)

ax.set_xticks([ ])   ---   隐藏x轴刻度和刻度值

ax.set_yticks([ ])   ---   隐藏y轴刻度和刻度值

*如果只需隐藏刻度值,同时保留刻度的话,使用ax.xaxis.set_major_formatter(plt.NullFormatter())命令和ax.yaxis.set_major_formatter(plt.NullFormatter())命令。

十五. 设置坐标轴刻度和刻度标签

ax.set_xticks([1,2,3])   ---   设置x轴刻度为1,2,3

ax.set_yticks([1,2,3])   ---   设置y轴刻度为1,2,3

ax.set_xticklabels(["one","two","three"])   ---   设置x轴刻度标签为one,two,three

ax.set_yticklabels(["one","two","three"])   ---   设置y轴刻度标签为one,two,three

十六. 创建多个图像

大图里放小图(inset):ax1=fig.add_axes([left, bottom, width, height])   --- [left, bottom, width, height]用来设置新坐标轴的位置和大小

规则网格图(regular grid of plots):fig,ax=plt.subplots(num_of_rows,num_of_columns,sharex=True,sharey=True)   ---   创建几行几列的网格图后,可以用ax[0].plot(),ax[1].plot()等等相继在各网格上画图

不规则网格图(irregular grid of plots):grid=plt.GridSpec(2,3); ax1=fig.add_subplot(grid[0,1:])   ---   先设置一个二行三列的网格,再在此网格上的第一行,第二到第三列添加坐标轴,可继续添加,以此类推

fig.subplots_adjust(hspace=0.4,wspace=0.6)调整子图间的距离。

十七. 设置显示中文和负号

a. 下载字体:msyh.ttf (微软雅黑),放在matplotlib的字体文件夹内:Lib\site-packages\matplotlib\mpl-data\fonts\ttf

b. 进入Python安装目录下的Lib\site-packages\matplotlib\mpl-data目录,打开matplotlibrc文件,在font.sans-serif后添加微软雅黑字体(Microsoft YaHei),修改axes.unicode_minus为False

c. 删除.matplotlib/cache里面的两个缓存字体文件

d. 重启Python

c. 在脚本里写上该命令:matplotlib.rcParams['font.sans-serif']='Microsoft Yahei'或在需要显示中文的地方加上参数:fontproperties='Microsoft Yahei'

以上只是Matplotlib的一些基本用法,如需使用更深入的用法或设置更多参数,请查看官网。

下面列出一些用matplotlib画的基本图形。

一. 画柱形图/条形图

ax.bar()和ax.barh()

例子:Matplotlib学习---用matplotlib画柱形图,堆积柱形图,横向柱形图(barchart)

二. 画散点图/气泡图

ax.plot()和ax.scatter()

例子:Matplotlib学习---用matplotlib画散点图,气泡图(scatterplot, bubble chart)

三. 画折线图

ax.plot()

例子:Matplotlib学习---用matplotlib画折线图(line chart)

四. 画直方图/密度图

ax.hist()

例子:Matplotlib学习---用matplotlib画直方图/密度图(histogram, density plot)

五. 画饼图/面包圈图

ax.pie()

例子:Matplotlib学习---用matplotlib画饼图/面包圈图(pie chart, donut chart)

另外,发现有一个比较好的介绍matplotlib基本功能的网站:http://www.labri.fr/perso/nrougier/teaching/matplotlib/

Matplotlib学习---matplotlib的一些基本用法的更多相关文章

  1. Matplotlib学习---matplotlib里颜色,标记,线条类型参数的选择(colors, markers, line styles)

    颜色(Colors): 基础颜色: character color 'b' blue 'g' green 'r' red 'c' cyan 'm' magenta 'y' yellow 'k' bla ...

  2. matplotlib学习笔记.CookBook

    matplotlib 是Python下的一个高质量的画图库,可以简单的类似于MATLAB方法构建高质量的图表. 原始文章地址:http://zanyongli.i.sohu.com/blog/view ...

  3. 对图像组成不了解?这样学习Matplotlib必走弯路!

    在学习Matplotlib的过程中,大家一定会遇到这样那样的问题,比如说,背景图怎么设置?坐标轴怎么设置?坐标轴上的刻度值怎么设置?怎样在PyQt中添加Matplotlib绘图模块? 其实想要学好用好 ...

  4. Matplotlib学习笔记(二)

    原  Matplotlib学习笔记 参考:Python数据科学入门教程 Python3.6.1 jupyter notebook .caret, .dropup > .btn > .car ...

  5. Matplotlib学习笔记(一)

    原   matplotlib学习笔记 参考:Python数据科学入门教程 Python3.6.1 jupyter notebook .caret, .dropup > .btn > .ca ...

  6. Matplotlib学习---用matplotlib和sklearn画拟合线(line of best fit)

    在机器学习中,经常要用scikit-learn里面的线性回归模型来对数据进行拟合,进而找到数据的规律,从而达到预测的目的.用图像展示数据及其拟合线可以非常直观地看出拟合线与数据的匹配程度,同时也可用于 ...

  7. Matplotlib学习---用matplotlib画箱线图(boxplot)

    箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)分 ...

  8. Matplotlib学习---用matplotlib画饼图/面包圈图(pie chart, donut chart)

    我在网上随便找了一组数据,用它来学习画图.大家可以直接把下面的数据复制到excel里,然后用pandas的read_excel命令读取.或者直接在脚本里创建该数据. 饼图: ax.pie(x,labe ...

  9. Matplotlib学习---用matplotlib画直方图/密度图(histogram, density plot)

    直方图用于展示数据的分布情况,x轴是一个连续变量,y轴是该变量的频次. 下面利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://d ...

随机推荐

  1. rabbitMQ教程(五)rabbitmq 指令 以及解决web管理界面无法使用guest用户登录

    安装最新版本的rabbitmq(3.3.1),并启用management plugin后,使用默认的账号guest登陆管理控制台,却提示登陆失败. 翻看官方的release文档后,得知由于账号gues ...

  2. Vicious Keyboard CodeForces - 801A (暴力+模拟)

    题目链接 题意: 给定一个字符串,最多更改一个字符,问最多可以有多少个“VK”子串? 思路: 由于数据量很小,不妨尝试暴力写.首先算出不更改任何字符的情况下有多个VK字串,然后尝试每一次更改一个位置的 ...

  3. git在vs2017中的使用

    对于习惯了右键提交源代码的道友来说,敲命令行真的蓝瘦香菇.所幸17里集成了Git插件,用起来还是挺方便的. 1.本地安装git,工具还是要有的,主要用于配置环境,ssh配置一下.就不用每次都去连接了. ...

  4. python模块详解

    什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(.p ...

  5. centos yum install nginx

    nginx newshttp://nginx.org/ nginx news: 2017http://nginx.org/2017.html nginx: Linux packageshttps:// ...

  6. vue组件内部引入远程js文件

    之所以要做这个是因为,在一个组件内部需要引入一个js文件来定位.如果放在index.html,这样每个组件都会有这个js.所以需要在组件内单独引入. 第一种操作 Dom引入js: export def ...

  7. Es6数值拓展

    Es6数值拓展 一,Number扩展 1,ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示. 将0b和0o前缀的字符串数值转为十进制,要使用Number方法 N ...

  8. [转帖]Windows 10新预览版上线:可直接运行任意安卓APP了

    Windows 10新预览版上线:可直接运行任意安卓APP了 http://www.pcbeta.com/viewnews-80316-1.html 今晨(3月13日),微软面向Fast Ring(快 ...

  9. 372.Definition of ListNode

    单项列表只能把后一个node中的所有数据copy到当前node再delete后一node. /** * Definition of ListNode * class ListNode { * publ ...

  10. HDU 5898 odd-even number

    题目:odd-even number 链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5898 题意:给一个条件,问l 到r 之间有多少满足条件的 ...