一、什么是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. Python——Django框架——Form框架

    一.引入Form包 from django import forms 二.定义规则 class Forms_Login(forms.Form): 用户名 = forms.CharField(requi ...

  2. 如何自己绘制fcitx4输入法皮肤?

    先来给大家看看我自己修改后的结果 当然你可以自己设计,自己定义喜欢的颜色和样式 但是注意,这个教程仅仅针对使用fcitx皮肤面板的输入法,例如rime.sunpinyin等. 搜狗输入法.讯飞输入法. ...

  3. WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS

    title: WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS date: 2020-03-20 10:43:00 categories: acm tags: [ ...

  4. codeforces 5E(非原创)

    E. Bindian Signalizing time limit per test 4 seconds memory limit per test 256 megabytes input stand ...

  5. Linux 驱动框架---input子系统框架

    前面从具体(Linux 驱动框架---input子系统)的工作过程学习了Linux的input子系统相关的架构知识,但是前面的学习比较实际缺少总结,所以今天就来总结一下输入子系统的架构分层,站到远处来 ...

  6. Androidstudio 新GradlePlugin和Gradle Version对应关系

    Project Gradle AS建议升级到4.2. Plugin对应AS的版本,Plugin工具也要和Gradle对应上,否则某些语法不支持,如果是非必要的建议不要轻易升级. Gradle DSL ...

  7. iPad Pro 涂鸦绘画实用技巧

    iPad Pro 涂鸦绘画实用技巧 绘画,涂鸦,简笔画 pre-requirement iPad Pro Apple Pencil 实用技巧 zoom in, zoom out 应用矢量的特性,灵活缩 ...

  8. D language

    D language https://en.wikipedia.org/wiki/D_(programming_language) Dart https://dlang.org/ flutter fr ...

  9. Enums & JavasScript & TypeScript

    Enums & JavasScript & TypeScript ES6 & TS https://www.typescriptlang.org/docs/handbook/e ...

  10. lock free(无锁并发)是什么

    一.非阻塞同步(Non-blocking Synchronization) 1. 无锁编程 / lock-free / 非阻塞同步 无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线 ...