matplotlib是python里用于绘图的专用包,功能十分强大。下面介绍一些最基本的用法:

一、最基本的划线

先来一个简单的示例,代码如下,已经加了注释:

import matplotlib.pyplot as plt
import numpy as np # 先获取一个图表
plt.figure() # 设置图表的标题
plt.title("sale report") # 设置y轴的label标签
plt.ylabel("amount") # 设置x轴的label标签
plt.xlabel("month") # 模拟一些(X,Y)坐标数据(注:习惯上用大写表示矩阵)
X = np.arange(0, 13)
Y = np.array([100, 200, 200, 300, 400, 600, 500, 550, 600, 700, 800, 750, 800]) # 将x轴的刻度范围限制为-0.5~12.2
plt.xlim(-0.5, 12.2) # 将y轴的刻度范围限制为0~1000
plt.ylim(0, 1000) # 将(X,Y)坐标用red红色画线
plt.plot(X, Y, 'r') # X坐标也可以省略,只要Y轴的坐标值即可,--表示是虚线
plt.plot(Y + 50, '--') # g+表示green绿色,画图的样式为+号
plt.plot(Y - 50, 'g+') # 同时划二条线,第1个是yellow黄色,第2个是magenta色,另外还设置了样式1
plt.plot(Y - 100, 'y', Y - 150, 'm1') # 渲染出来
plt.show()

注:plt中有很多缩写,比如r代表red,y代表yellow,xlim即x-axis-limit(x轴的限制),另外g+,表示颜色是green,而后面的+号表示划线的样式。从源码中可以找到更多的缩写说明。 matplotlib/axes/_axes.py 在这个文件中,plot方法的注释里有相关描述:

 The following format string characters are accepted to control
the line style or marker: ================ ===============================
character description
================ ===============================
``'-'`` solid line style
``'--'`` dashed line style
``'-.'`` dash-dot line style
``':'`` dotted line style
``'.'`` point marker
``','`` pixel marker
``'o'`` circle marker
``'v'`` triangle_down marker
``'^'`` triangle_up marker
``'<'`` triangle_left marker
``'>'`` triangle_right marker
``'1'`` tri_down marker
``'2'`` tri_up marker
``'3'`` tri_left marker
``'4'`` tri_right marker
``'s'`` square marker
``'p'`` pentagon marker
``'*'`` star marker
``'h'`` hexagon1 marker
``'H'`` hexagon2 marker
``'+'`` plus marker
``'x'`` x marker
``'D'`` diamond marker
``'d'`` thin_diamond marker
``'|'`` vline marker
``'_'`` hline marker
================ =============================== The following color abbreviations are supported: ========== ========
character color
========== ========
'b' blue
'g' green
'r' red
'c' cyan
'm' magenta
'y' yellow
'k' black
'w' white
========== ========

二、绘制数学函数

下面是抛物线、直线、三角函数的演示:

import matplotlib.pyplot as plt
import numpy as np # 先获取一个图表
fig = plt.figure() # 抛物线
X1 = np.linspace(-5, 5, 50) # -5 ~ 5 之间生成50个点
Y1 = X1 ** 2 + 5
plt.plot(X1, Y1, 'r')
# plt.plot(X1, Y1, color='red', label='parabola') # 三角函数
X2 = np.linspace(np.pi, 5 * np.pi, 50) # 在pi ~ 5pi之间生成50个点
Y2 = 6 * np.cos(X2)
plt.plot(X2, Y2, 'y')
# plt.plot(X2, Y2, color='y', label='cosine') # 直线
X3 = np.linspace(-4, 6, 20)
Y3 = 3 * X3 + 10
plt.plot(X3, Y3, 'g--')
# plt.plot(X3, Y3, color='green', linestyle='--', label='line') # 显示图例说明
# plt.legend() # 渲染出来
plt.show()

注意:代码中有一些行被注释掉了,比如:plt.plot(X1, Y1, color='red', label='parabola') ,这其实是 plt.plot(X1, Y1, 'r') 的完整写法,其中label只有完整写法中才能指定。换成完整写法后,同时把plt.legend() 前面的注释去掉,再次运行图上就会显示出所谓的"图例"

三、坐标轴控制、文本注解显示

先看效果图:

代码如下:

# coding:utf8

import matplotlib.pyplot as plt
import numpy as np # 先获取一个图表
fig = plt.figure() # 设置x,y坐标轴的刻度显示范围
plt.xlim(-7, 7)
plt.ylim(0, 7) # 抛物线
X1 = np.linspace(-5, 5, 50) # -5 ~ 5 之间生成50个点
Y1 = 0.25 * X1 ** 2
plt.plot(X1, Y1, color='red', label=r'$y=\frac{x^2}{4}$') # 直线
X2 = np.linspace(-5, 5, 50)
Y2 = X2
plt.plot(X2, Y2, color='green', linestyle='--', label=r'$y=x$') # 黑色辅助线
plt.plot([4, 4], [4, 0], "k--")
# 抛物线与直线的交点处,标记1个黑点
plt.plot([4, 4], [4, 4], 'ko') # 交点处的文本(annotate方式)
plt.annotate(r'$y=\frac{4^2}{4}=4$',
xy=(4, 4),
xycoords='data',
xytext=(+10, -30),
textcoords='offset points',
fontsize=12,
color="red",
arrowprops=dict(arrowstyle="->",
color="red",
connectionstyle="arc3,rad=.5"))
# text方式的文本
plt.text(5.2, 6.1, r'$y=\frac{x^2}{4}$', fontdict={'size': 16, 'color': 'r'})
plt.text(5.2, 5.1, r'$y=x$', fontdict={'size': 16, 'color': 'g'}) # 获取当前坐标轴gca即get current axis
ax = plt.gca() # 去掉上、右二侧的边框线
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none') # 将左侧的y轴,移到x=0的位置
ax.spines['left'].set_position(('data', 0)) # 调整x轴刻度(从-5到+5,正好11个点)
plt.xticks(np.linspace(-5, 5, 11))
# 调整y轴刻度
plt.yticks(np.linspace(1, 6, 6)) # 给坐标轴加箭头
plt.arrow(0, 7, 0, 0, width=0.2, color="k", clip_on=False, head_width=0.2, head_length=0.2)
plt.arrow(7, 0, 0.01, 0, width=0.2, color="k", clip_on=False, head_width=0.2, head_length=0.2) # 显示图例说明
plt.legend() # 显示
plt.show()

  

三、散点图

# coding:utf8

import matplotlib.pyplot as plt

# 先获取一个图表
fig = plt.figure() # 设置x,y坐标轴的刻度显示范围
plt.xlim(-5, 20)
plt.ylim(-5, 30) # 画散点图
X1 = [0, 10]
Y1 = [10, 20]
# c即color , s即scale
plt.scatter(X1, Y1, c='r', s=80, label='scatter 1')
plt.scatter([10, 15], [5, 10], c='g', label='scatter 2') # 显示网格
plt.grid(True, alpha=0.3) # 加上坐标说明
plt.text(0.5, 10.5, r'$(0,10)$')
plt.text(10.5, 20.5, r'$(10,20)$')
plt.text(10.5, 5.5, r'$(10,5)$')
plt.text(15.5, 10.5, r'$(15,10)$') # 显示图例说明
plt.legend() # 显示
plt.show()

 

参考文章:

1、Matplotlib tutorial

2、Matplotlib tutorial (中文翻译)

3、Matplotlib Gallery (官网)

4、基于官方教程的matplotlib简介

5、官网pyplot教程

6、莫烦的视频

7、matplotlib常用公式

Matplotlib新手上路(上)的更多相关文章

  1. Matplotlib新手上路(下)

    接上篇继续,这次来演示下如何做动画,以及加载图片 一.动画图 import numpy as np import matplotlib.pyplot as plt import matplotlib. ...

  2. Matplotlib新手上路(中)

    接上回继续 一.多张图布局(subplot) 1.1 subplot布局方式 import matplotlib.pyplot as plt plt.figure() plt.subplot(3, 2 ...

  3. OpenGL教程之新手上路

    Jeff Molofee(NeHe)的OpenGL教程- 新手上路 译者的话:NeHe的教程一共同拥有30多课,内容翔实,而且不断更新 .国内的站点实在应该向他们学习.令人吃惊的是,NeHe提供的例程 ...

  4. webpack4配置详解之新手上路初探

    前言 经常会有群友问起webpack.react.redux.甚至create-react-app配置等等方面的问题,有些是我也不懂的,慢慢从大家的相互交流中,也学到了不少. ​ 今天就尝试着一起来聊 ...

  5. 转-spring-boot 注解配置mybatis+druid(新手上路)-http://blog.csdn.net/sinat_36203615/article/details/53759935

    spring-boot 注解配置mybatis+druid(新手上路) 转载 2016年12月20日 10:17:17 标签: sprinb-boot / mybatis / druid 10475 ...

  6. 活字格企业 Web 应用生成器新手上路指南

    活字格是一款企业 Web 应用生成器,使用了类 Excel 的设计界面,通过简单的拖拽操作,就能快速制作出一个 Web 信息管理系统.在整个使用过程中无需专业软件知识,没有任何技术门槛,能轻松实现各行 ...

  7. Ocelot 新手上路

    新手上路,老司机请多多包含!Ocelot 在博园里文章特别多,但是按照其中一篇文章教程,如果经验很少或者小白,是没法将程序跑向博主的结果. 因此总结下     参考多篇文章,终于达到预期效果. Oce ...

  8. 新手上路——it人如何保持竞争力

    新手上路——如何保持竞争力 JINGZHENGLI 套用葛大爷的一句名言:21世纪什么最贵,人才.哪你是人才还是人材?还是人财或人裁?相信大家都不是最后一种.何如保持住这个光环呢?就需要我们保持我们独 ...

  9. FreeSql 新手上路系列教程已发布在 cnblogs

    FreeSql 是一个功能强大的对象关系映射程序(O/RM),支持 .NETCore 2.1+ 或 .NETFramework 4.5+(QQ群:4336577) FreeSql采用MIT开源协议托管 ...

随机推荐

  1. Linux学习之CentOS(十二)--crontab命令的使用方法

    http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/06/3002602.html crontab命令常见于Unix和Linux的操作系统之 ...

  2. typeof引发的思考

    今天在群里看到一位网友提问:var status=1; typeof status 结果输出什么 我会心一笑  ,这尼玛这么简单,一看就是‘number’,结果网友说不是number,而是string ...

  3. 【ES】学习8-聚合1

    参考资料: https://elasticsearch.cn/book/elasticsearch_definitive_guide_2.x/_combining_the_two.html 特定概念: ...

  4. php三种常用的加密解密算法

    方法一: /** * @param $string 要加密/解密的字符串 * @param string $operation 类型,ENCODE 加密:DECODE 解密 * @param stri ...

  5. 《剑指offer》-统计整数二进制表示中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 直观思路就是把二进制表示从右往左统计1的个数.直接想到移位操作来迭代处理.坑点在于负数的移位操作会填充1.有人贴出了逻辑移位 ...

  6. LINQ学习之旅 (四)

    LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains 1.Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. ...

  7. sdoi<序列计数>

    链接:https://www.luogu.org/problemnew/show/P3702 题解: 碰到计数题都要想想容斥 就跟碰到最大值最小要想想二分一样 考虑没有一个数是质数 那就确定了每一个数 ...

  8. python全栈开发day35-线程、协程

    一.线程 1.线程 1).什么是线程 线程是cpu调度的最小单位 线程是进程的必要组成单位 一个进程里至少含有一个线程 2).主线程 程序开始运行的视乎,就产生了一个主线程来运行这个程序 3).子线程 ...

  9. 【spring基础】AOP概念与动态代理详解

    一.代理模式 代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一 ...

  10. Codeforces 498B Name That Tune 概率dp (看题解)

    Name That Tune 刚开始我用前缀积优化dp, 精度炸炸的. 我们可以用f[ i ][ j ] 来推出f[ i ][ j + 1 ], 记得加加减减仔细一些... #include<b ...