matplotlib是python中的一个画图库,继承了matlib(从名字上也看得出来)的优点和语法,所以对于熟悉matlib的用户来说是十分友好的。

pylab和pyplot

关于pylab和pyplot,人们做过不少的讨论。这两个模块有哪些不同呢?pylab模块跟matplotlib一起安装,而pyplot则是matplotlib的内部模块。两者的导入方法有所不同,可选择其中一种进行导入。

  1. from pylab import *
  2. #或
  3. import matplotlib.pyplot as plt
  4. import numpy as np

pylab在同一命名空间整合了pyplot和Numpy的功能,因此无需再单独导入Numpy。更进一步来说,导入pylab后,pyplot和Numpy的函数就可以直接调用,而不用再指定其所属模块(命名空间),从而使得matplotlib开发环境更像是Matlab。

  1. plot(x,y)
  2. array([1,2,3,4])
  3. #而不用指定模块名称
  4. plt.plot()
  5. np.array([1,2,3,4])

大多情况下,我们更乐意使用pyplot模块。

线状图

这里我使用jupyter来进行演示

  1. ipython qtconsole --matplotlib inline

用matplotlib生成这个图表很简单,一行代码就能搞定

  1. plt.plot([1,2,3,4])
  2. plt.show()

如图所示,生成了一个Line2D对象。该对象为一条直线,它表示图表中各数据点的线性延伸趋势。我们可以看出,列表中的数据直接被作为y轴的值展示了出来,x周是从0开始的,所以我们要看一个数据的折线图,只用输入一个list即可。

但我们可以看出这个图可能还很简陋,比如有如下几个问题:

  • y轴显示为啥是0.5为步长间隔,我想以1为步长间隔
  • 我想控制x轴展示的值,而不是从0开始
  • 图太小了,能否控制大小
  • x轴和y轴字太小了,能否控制大小
  • 给x轴和y轴命个名吧
  • 没有网格看不清
  • 没有图例
  • 给线状图标上点
  • 我想保存图片到本地
  • 怎么画子图呢

接下来我们就一个一个解决。

1.设置x轴和y轴步长间隔

控制x轴,y轴显示的值,有两个参数

  • xticks(ticks, [labels], **kwargs)

  • yticks(ticks, [labels], **kwargs)

    • ticks:控制显示的位置,也就是显示那几个值,这几个值必须在y值数据的范围内,这里也就是[1,4]这个范围。
    • [labels]:控制显示在对应位置的值,可以是数也可以是字符。
  1. y = [1,2,3,4]
  2. step = 1
  3. plt.yticks([i for i in y if i%step == 0])
  4. plt.plot(y)

2.x轴展示的值

这里展示了坐标轴显示字符的情况。

注意第五行,我改成了[1,2,3,3.5,4],所以显示出来就多了个3.5。

  1. y = [1,2,3,4]
  2. scale_ls = range(4)
  3. index_ls = ["富强","民主","文明","和谐"]
  4. plt.xticks(scale_ls,index_ls)
  5. plt.yticks([1,2,3,3.5,4])
  6. plt.plot(y)

3.控制图表大小

控制图表的大小要用到的几个方法

  • rcParams:这个参数是用来设置一些配置参数的,比如这里我就用到了大小和dpi

    • figure.figsize:控制大小,参数为一个二元组(x,y),即长、宽
    • figure.dpi:控制dpi
  1. plt.rcParams['figure.figsize'] = (10,5)
  2. plt.rcParams['figure.dpi'] = 200
  3. y = [1,2,3,4]
  4. scale_ls = range(4)
  5. index_ls = ["富强","民主","文明","和谐"]
  6. plt.xticks(scale_ls,index_ls)
  7. plt.yticks([1,2,3,3.5,4])
  8. plt.plot(y)

这里可以看出更大更清晰了

4.调节x轴和y轴字体大小

这里控制字体大小用到的也是xticksyticks,只不过使用到了fontsize参数。

  1. plt.rcParams['figure.figsize'] = (10,5)
  2. plt.rcParams['figure.dpi'] = 200
  3. y = [1,2,3,4]
  4. scale_ls = range(4)
  5. index_ls = ["富强","民主","文明","和谐"]
  6. plt.xticks(scale_ls,index_ls,fontsize=20)
  7. plt.yticks([1,2,3,3.5,4],fontsize=20)
  8. plt.plot(y)

5.给x轴和y轴加上名字

使用

  • xlabel(str,fontsize=int )
  • ylabel(str,fontsize=int )
  1. plt.rcParams['figure.figsize'] = (10,5)
  2. plt.rcParams['figure.dpi'] = 200
  3. y = [1,2,3,4]
  4. scale_ls = range(4)
  5. index_ls = ["富强","民主","文明","和谐"]
  6. plt.xticks(scale_ls,index_ls,fontsize=20)
  7. plt.yticks([1,2,3,3.5,4],fontsize=20)
  8. plt.xlabel("核心价值观", fontsize=20)
  9. plt.ylabel("顺序", fontsize=20)
  10. plt.plot(y)

6.加上网格

  • plt.grid(True),加上横纵两种网格。
  • plt.grid(True,axis="x"),加上x轴网格。
  1. plt.rcParams['figure.figsize'] = (10,5)
  2. plt.rcParams['figure.dpi'] = 200
  3. y = [1,2,3,4]
  4. scale_ls = range(4)
  5. index_ls = ["富强","民主","文明","和谐"]
  6. plt.xticks(scale_ls,index_ls,fontsize=20)
  7. plt.yticks([1,2,3,3.5,4],fontsize=20)
  8. plt.xlabel("核心价值观", fontsize=20)
  9. plt.ylabel("顺序", fontsize=20)
  10. plt.grid(True,axis="both")
  11. plt.plot(y)

7.加上图例

使用legend方法,里面有这么几个参数

  • handles:代表使用的是那几个曲线的对象
  • labels:代表对应的图例文字
  • loc:放置的位置
  • prop:额外参数,例如size,控制图例大小
  1. t = np.arange(0, 2.5, 0.01)
  2. y1 = map(math.sin, math.pi*t)
  3. y2 = map(math.cos, math.pi*t)
  4. l1, = plt.plot(list(y1))
  5. l2, = plt.plot(list(y2))
  6. plt.legend(handles = [l1, l2], labels = ['Sin', 'Cos'], loc = 'best', prop={'size': 20})

8.给线状图标点

只用在plot加入参数marker 即可

  1. t = np.arange(0, 2.5, 0.1)
  2. y1 = map(math.sin, math.pi*t)
  3. y2 = map(math.cos, math.pi*t)
  4. l1, = plt.plot(list(y1), marker = "o")
  5. l2, = plt.plot(list(y2), marker = "*")
  6. plt.legend(handles = [l1, l2], labels = ['Sin', 'Cos'], loc = 'best', prop={'size': 20})

9.保存图片到本地

只用在最后使用savefig 方法

  1. plt.savefig('test.png',dpi=400)

10.画子图

这里使用到了subplot方法

他有三个参数,分别为

  • 几行
  • 几列
  • 第几个

举个栗子

  1. subplot(2,2,1) 2行2列(即子图排列为田字格形状)第一个
  2. subplot(2,1,2) 2行1列(即子图排列为纵向两个图形状)第二个
  1. t = np.arange(0, 2.5, 0.1)
  2. y1 = map(math.sin, math.pi*t)
  3. y2 = map(math.cos, math.pi*t)
  4. plt.subplot(2, 1, 1)
  5. plt.title("Sin", fontsize=20)
  6. l1, = plt.plot(list(y1), marker = "o")
  7. plt.subplot(2, 1, 2)
  8. plt.title("Cos", fontsize=20)
  9. l2, = plt.plot(list(y2), marker = "*")

这里我还使用到了title方法,给对应图表加上了标题。

利用matplotlib进行数据可视化的更多相关文章

  1. 基于matplotlib的数据可视化 - 笔记

    1 基本绘图 在plot()函数中只有x,y两个量时. import numpy as np import matplotlib.pyplot as plt # 生成曲线上各个点的x,y坐标,然后用一 ...

  2. matplotlib实现数据可视化

    一篇matplotlib库的学习博文.matplotlib对于数据可视化非常重要,它完全封装了MatLab的所有API,在python的环境下和Python的语法一起使用更是相得益彰. 一.库的安装和 ...

  3. 【Matplotlib】数据可视化实例分析

    数据可视化实例分析 作者:白宁超 2017年7月19日09:09:07 摘要:数据可视化主要旨在借助于图形化手段,清晰有效地传达与沟通信息.但是,这并不就意味着数据可视化就一定因为要实现其功能用途而令 ...

  4. 使用 jupyter-notebook + python + matplotlib 进行数据可视化

    上次用 python 脚本中定期查询数据库,监视订单变化,将时间与处理完成订单的数量进行输入写入日志,虽然省掉了人为定时查看数据库并记录的操作,但是数据不进行分析只是数据,要让数据活起来! 为了方便看 ...

  5. 如何最简便的利用Python实现数据可视化?当然离不开matplotlib!

    01|Figure和Subplot: matplotlib的图像全部在figure对象里面,就像是一片画布.figsize是figure的一个设置大小的属性.一个figure里面可以有无数个subpl ...

  6. 『Matplotlib』数据可视化专项

    一.相关知识 官网介绍 matplotlib API 相关博客 matplotlib绘图基础 漂亮插图demo 使用seaborn绘制漂亮的热度图 fig, ax = plt.subplots(2,2 ...

  7. 基于matplotlib的数据可视化 - 等高线 contour 与 contourf

    contour 与contourf 是绘制等高线的利器. contour  - 绘制等高线 contourf - 填充等高线 两个的返回值值是一样的(return values are the sam ...

  8. 利用pyecharts将数据可视化

    可视化展示在数据分析领域中是一个至关重要的点,好的可视化展示对我们的结果分析有更好的支持作用. 一.问题 在数据分析的时代里面我们需要将数据的可视化展现出来,更加方便用户的观察.如下图 有些时候我们需 ...

  9. 用matplotlib对数据可视化

    下图是要用到的数据集,反映了从1984到2016年的失业率的变化 1.导入可视化模块import matlibplot.pyplot as plt, 函数plt.plot(x, y)确定折线图的点,x ...

随机推荐

  1. vitual box 虚拟机调整磁盘大小 resize partiton of vitual os

    key:vitual box, 虚拟机,调整分区大小 引用:http://derekmolloy.ie/resize-a-virtualbox-disk#prettyPhoto 1. 关闭虚拟机,找到 ...

  2. 第二代网关GateWay搭建流程

    Spring Cloud第二代网关GateWay是由纯Netty开发,底层为Reactor,WebFlux构建,不依赖任何Servlet容器,它不同于Zuul,使用的是异步IO,性能较Zuul提升1. ...

  3. 黑科技如何制造人类V2.0?

    黑科技泛指人类尚未成熟但具有巨大潜力的科学技术,智能手机.大数据.扫码支付.电子地图等等都曾属于黑科技范畴,随着时间的推移,它们慢慢成熟,且展现出巨大的能力,影响人类进程,最终黑科技转变成人类伟大的创 ...

  4. 900B. Position in Fraction#分数位置(模拟)

    题目出处:http://codeforces.com/problemset/problem/900/B 题目大意:找到一个数字在小数部分中第一次出现的位置 #include<iostream&g ...

  5. nginx限制IP访问网站

    需求:网站只允许指定IP访问,其他访问一律拒绝server { listen 80; server_name a.com; index index.html index.htm index.php; ...

  6. PyTorch基础——预测共享单车的使用量

    预处理实验数据 读取数据 下载数据 网盘链接:https://pan.baidu.com/s/1n_FtZjAswWR9rfuI6GtDhA 提取码:y4fb #导入需要使用的库 import num ...

  7. Fiddler发送get post测试 笔记

    0 环境 系统环境:win7 1 操作 1 post 类似 2 get

  8. 学习C++之前要先学习C语言吗?

    C++ 读作“C加加”,是“C Plus Plus”的简称.顾名思义,C++ 是在C语言的基础上增加新特性,玩出了新花样,所以叫“C Plus Plus”,就像 iPhone 7S 和 iPhone ...

  9. spring-boot jpa mysql emoji utfmb4 异常处理

    spring-boot jpa mysql utf8mb4 emoji 写入失败 mysql database,table,column 默认为utf8mb4 Caused by: java.sql. ...

  10. 以elasticsearch-hadoop 向elasticsearch 导数,丢失数据的问题排查

    实际这是很久之前的问题了,当时没时间记录 这里简单回顾 项目基于 数据架构不方便说太细,最精简的 somedata-> [kafka]->spark-stream->elastics ...