一、什么是matplotlib?

  python的底层绘图工具,主要做数据可视化图表,源自matplot。

二、为什么要学matplotlib?

  1、它能将数据进行可视化,更直观的呈现出来

  2、它能让数据更加客观,更具有说服力

三、为什么三剑客【numpy、pandas、matplotlib】我要先学matplotlib?

  因为其他的几个都是基于数据本身进行操作,但不具备可视化能力,所以,看不出有什么高大上的地方。

四、matplotlib的基本要点

  我们先来展示一张matplotlib绘制的简单图表(讲真,简单图表方面,我觉得还是Excel来的好,但是数据量庞大的话,Excel可能就崩溃了)

   

  图上,每一个红色点都是一个坐标(小学数据知识),通过连接不同坐标,构成了一张折线图(X/Y 轴就不再赘述了),这就是matplotlib最简单的构图

  那么如何利用matplotlib来构建图表,就是我们接下来要说的。

五、matplotlib简单构图

  例如:假设一天中每隔两个小时(range(2,26,2))的气温(℃)分别是[15,13,14.5,17,20,25,26,26,27,22,18,15],现在要求绘制出来这个图形。

# 首先导入模块库的功能,即从matplotlib中导入pyplot这个绘图功能
from matplotlib import pyplot as plt #定义x、y轴的数据
x = range(2,26,2)
y =[15,13,14.5,17,20,25,26,26,27,22,18,15]
#这里也可以不写x/y,只是在利用函数的时候,别写错对应位置 

#绘图,方法括号内,第一个对象是x轴,第二个是y轴
plt.plot(x,y)

#利用pycharm展现图片
plt.show()

  到这里,简单的绘图就好了。

  补充知识点:这里的plt.plot()函数,是用来绘制折线图

  运行pycharm,我们就可以得到下图

  

  EMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM..........

  一个好消息,一个坏消息。

  好消息是------我们图画出来了,是的,对照题干检查,毫无问题

  坏消息是------离开题目,谁特么知道你画的这是什么鬼!

六、图片加工

  是的,这个图片需要进一步加工,比如提出以下需求:

  1、设置图片大小、清晰度:我们需要1080高清无码图

  2、告诉读者x/y轴分别是什么

  3、调整下x/y轴的刻度间距

  4、线条是不是可以更好看一点?

  5、标记几个特殊位置,最高点,最低点?

  6、加个水印啥的,这是我原创!

  7、保存到当地,以方便我以后使用

  

# 首先导入模块库的功能,即从matplotlib中导入pyplot这个绘图功能
from matplotlib import pyplot as plt #定义x、y轴的数据
x = range(2,26,2)
y =[15,13,14.5,17,20,25,26,26,27,22,18,15] #告诉matplotlib你需要的图片的格式大小和清晰度
#在figsize=()的括号内传入图片的长、宽(注意顺序是长、宽)
#同时dpi是清晰度,常态图片我们用80/90 这样子,看你自己需求来调整;如果图像模糊,也通过修改dpi值来调整
#注意,这一步要在绘图前规定好,因为底层要根据这个需求来设立图形框架,其他的,都可以视作对图形的修饰,是在图形出现之后
fig = plt.figure(figsize=(20,8),dpi=80) #绘图,方法括号内,第一个对象是x轴,第二个是y轴
plt.plot(x,y) #调整x轴
#调整x轴的刻度,即将x这个列表对应到x轴上去
plt.xticks(x) #x轴的说明
plt.xlabel('时间')
plt.ylabel('温度,单位℃')
#同样y轴有个yticks方法,但因为我们y本身列表不具备规律性,我们重新做调整, 
#创建一个12到28,步长为2的列表作为y轴的对应刻度
y1 = range(12,30,2)
plt.yticks(y1)
#利用savefig方法保存到当地 
plt.savefig('./img1.png')

#利用pycharm展现图片
plt.show()

  然后我们得到以下的图片

  

  清晰多了,起码大概能看明白了。不过,那几个框框是什么情况?中文呢?被吃了?

   如何让中文显示出来?有两种方法

  最简单的,在Windows下,pycharm中在导入库之后,设置下中文的对应字体

  plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 加上这一句就完事儿了,但据说作用局限性比较大,反正我是好用,=[ ]内是字体名字,具体百度

  通用方法:导入matplotlib里面的字体库功能

from matplotlib import font_manager
my_font = font_manaeger.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')

  接下来在你代码中每一个需要中文的地方,添加一个参数变量:fontporperties = my_font,具体的可以看看百度,我个人用第一种,简单粗暴无脑

  我们再举一个例子试试:

  题干: 如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况?

      a= [random.randint(20,35) for i in range(120)]

  是不是没看懂这个a?这是个列表推导式,i从0到119,每一次都从20到35之间生成一个随机整数。

  对上述题干进行分析,

  就是10时01分-11时,11时01分-12时内共有120个数字,那么y轴是温度,x轴是时间;正常向的新手,在这里就会犯难,你这个x轴不讲道理啊,这个刻度怎么标,难道我去手写?

  手写行不行?

x = [ ]
for i in range(0,120):
if i < 60:
n = '10时{}分'.format(i)
else:
n = '11时{}分'.format(i-60)
x.append(n)

  然后,我们在进行画图,将 x 作为x轴坐标试试

  还行【昧着良心】

  还行【昧着良心】

  但是这个x轴是什么鬼啊!刻度太密,导致GG

  这里推荐一个稍微舒服一点的写法,x轴,先用0-119这120个数字来展现,然后再通过xticks方法来替换x轴如下:

  

from matplotlib import pyplot as plt
import random
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] fig = plt.figure(figsize=(10,5),dpi=80) x1 = range(0,120)
a = [random.randint(20,35) for i in range(120)] plt.plot(x1, a) x = []
for i in range(0,120):
if i < 60:
n = '10时{}分'.format(i)
else:
n = '11时{}分'.format(i-60)
x.append(n) plt.xlabel('时间')
plt.ylabel('温度,单位℃')
plt.show()

  绘制图形如下:

  这样我们就能清晰看出来图片状况,接下来,就是替换x轴了我代码里面已经准备了x的列表,但是,如果直接替换,就又双叒叕变成之前的样子,我们要先调整下x轴刻度,因为x列表里面是120个数据,直接替换,他就全写上去了,但是以20位差有点大,调整为10吧

,添加如下代码 plt.xticks(x1[::10], x[::10]) ,它的意思就是,修改x轴刻度,首先x1修改为步长为10,相应的,x也修改为步长10,确保跟x1对应。

  

from matplotlib import pyplot as plt
import random
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] fig = plt.figure(figsize=(10,5),dpi=80) x1 = range(0,120)
a = [random.randint(20,35) for i in range(120)] plt.plot(x1, a) x = []
for i in range(0,120):
if i < 60:
n = '10时{}分'.format(i)
else:
n = '11时{}分'.format(i-60)
x.append(n) #修改x轴刻度(需要理解下)
plt.xticks(x1[::10], x[::10])
plt.xlabel('时间')
plt.ylabel('温度,单位℃')
plt.show()

  新图如下:

 

  是不是清晰多了

  那么有的大佬会问,你最后一个坐标呢,我想,这个自己调吧,,,,我敲字敲累了,,,,,

  有人还会说,x轴还是有点紧,怎么解决,简单啊,把x轴的刻度写带点弧度就是了呀

  在修改x轴刻度那里加入一个参数:plt.xticks(x1[::10], x[::10],rotation= 45)

  还有这个图表的标题使用plt.title(‘标题’)来处理,直接上源代码给各位

  

from matplotlib import pyplot as plt
import random
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] fig = plt.figure(figsize=(10,5),dpi=80) x1 = range(0,120)
a = [random.randint(20,35) for i in range(120)] plt.plot(x1, a) x = []
for i in range(0,120):
if i < 60:
n = '10时{}分'.format(i)
else:
n = '11时{}分'.format(i-60)
x.append(n) #修改x轴刻度(需要理解下)
plt.xticks(x1[::5], x[::5],rotation= 45)
plt.xlabel('时间') plt.ylabel('温度,单位℃') plt.title('10点到12点的气温状况') plt.show()

  图片效果如下:

  

  这样,matplotlib基本图形构造就完成了,部分细节再完善下就好。

  

  

python数据分析三剑客基础之matpoltlib初解的更多相关文章

  1. python数据分析三剑客之: Numpy

    数据分析三剑客之: Numpy 一丶Numpy的使用 ​ numpy 是Python语言的一个扩展程序库,支持大维度的数组和矩阵运算.也支持针对数组运算提供大量的数学函数库 创建ndarray # 1 ...

  2. Python数据分析——numpy基础简介

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:基因学苑 NumPy(Numerical Python的简称)是高性 ...

  3. Python数据分析(基础)

    目录: Python基础: Python基本用法:控制语句.函数.文件读写等 Python基本数据结构:字典.集合等 Numpy:简述 Pandas:简述 一. Python基础: 1.1 文件读取 ...

  4. python数据分析 Numpy基础 数组和矢量计算

    NumPy(Numerical Python的简称)是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础. NumPy的部分功能如下: ndarray,一个具 ...

  5. python数据分析三剑客之: matplotlib绘图模块

    matplotlib 一.Matplotlib基础知识 Matplotlib中的基本图表包括的元素 - x轴和y轴 axis 水平和垂直的轴线 - x轴和y轴刻度 tick 刻度标示坐标轴的分隔,包括 ...

  6. python数据分析三剑客之: pandas操作

    pandas的操作 pandas的拼接操作 # pandas的拼接操作 级联 pd.concat , pd.append 合并 pd.merge , pd.join 一丶pd.concat()级联 # ...

  7. 小白学 Python 数据分析(1):数据分析基础

    各位同学好,小编接下来为大家分享一些有关 Python 数据分析方面的内容,希望大家能够喜欢. 人工植入广告: PS:小编最近两天偷了点懒,好久没有发原创了,最近是在 CSDN 开通了一个付费专栏,用 ...

  8. python数据分析中常用的库

    Python是数据处理常用工具,可以处理数量级从几K至几T不等的数据,具有较高的开发效率和可维护性,还具有较强的通用性和跨平台性,这里就为大家分享几个不错的数据分析工具,需要的朋友可以参考下 Pyth ...

  9. Python 数据分析(一) 本实验将学习 pandas 基础,数据加载、存储与文件格式,数据规整化,绘图和可视化的知识

    第1节 pandas 回顾 第2节 读写文本格式的数据 第3节 使用 HTML 和 Web API 第4节 使用数据库 第5节 合并数据集 第6节 重塑和轴向旋转 第7节 数据转换 第8节 字符串操作 ...

随机推荐

  1. std::invoke_result的实现详解

    目录 目录 前言 invoke_result 标准库中的invoke_result 我的实现 后记 前言 本篇博文将详细介绍一下libstdc++中std::invoke_result的实现过程,由于 ...

  2. Commons Collections2分析

    0x01.POC分析 //创建一个CtClass对象的容器 ClassPool classPool=ClassPool.getDefault(); //添加AbstractTranslet的搜索路径 ...

  3. 解决debian (Friendly ARM 嵌入式板)的sudo等一部分命令无法TAB补全

    TAB对于比较长的命令在使用时是十分方便的,最近就遇到TAB 键无法补全sudo后跟的命令的情况因此去网上取经.在一篇博客中找到解决问题的方法,觉得大牛们写的太精炼然后自己做如下总结方便自已以后解决类 ...

  4. iPhone 12 导入通讯录排序 Bug

    iPhone 12 导入通讯录排序 Bug iOS iOS 通讯录排序问题 Huawei OK solution iOS 切换中英文,修复排序通讯录 bug Awesome iOS Contacts ...

  5. TypeScript enum 枚举实现原理

    TypeScript enum 枚举实现原理 反向映射 https://www.typescriptlang.org/docs/handbook/enums.html enum Direction { ...

  6. js webpack打包时保留指定注释

    optimization: { minimizer: [ new TerserJSPlugin({ terserOptions: { format: { comments: /(\s*#if)|(\s ...

  7. animejs 动画库

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 从微信小程序到鸿蒙js开发【08】——表单组件&注册登录模块

    目录: 1.登录模块 2.注册模块 3.系列文章导读 牛年将至,祝大家行行无bug,页页so easy- 在微信小程序中,提供了form组件,可以将input.picker.slider.button ...

  9. java荷兰国旗问题

    荷兰国旗包含三种颜色:红.白.蓝. 有三种颜色的球,算法的目标是将这三种球按颜色顺序正确地排列.它其实是三向切分快速排序的一种变种,在三向切分快速排序中,每次切分都将数组分成三个区间:小于切分元素.等 ...

  10. Java Socket编程基础及深入讲解

    原文链接:https://www.cnblogs.com/yiwangzhibujian/p/7107785.html 原文写的特别好,非常详细,但是禁止转载,那我就不再复制粘贴了! socket实现 ...