Python数据分析:matplotlib库详细教程

  • 一、基本介绍
    • 1. 数据分析
    • 2. 环境安装
  • 二、matplotlib
    • 1. 基本介绍
    • 2. 基本要点
    • 3. 散点图/直方图/柱状图
    • 4. 画图工具

一、基本介绍

1. 数据分析

为什么要学习数据分析?
① 从一堆数据里面找到数据规律
② 岗位需求
③ 是Python数据科学的基础
④ 是机器学习课程的基础

数据分析:采用适当的方法对收集来的大量数据进行分析,帮助人们作出判断,以便采取适当行动。

数据分析流程
提出问题→准备数据→分析数据→获得结论→成果可视化

2. 环境安装

环境:anaconda
**‘清华大学开源软件镜像站’**下载

工具:jupyter notebook—编程/文档/笔记/展示软件
启动命令:jupyter notebook

import requests
response=requests.get('http://www.baidu.com')
response.status_code
response.test

二、matplotlib

1. 基本介绍

功能
① 能将数据可视化,更直观的呈现;
② 使数据更加客观,更具说服力。

定义
最流行的Python底层绘图库,主要做数据可视化图表,模仿MATLAB构建

2. 基本要点

axis轴:指的是x或y轴
坐标点:

问题:假设一天中每隔两个小时(range(2,26,2))的气温(℃)分别[15,13,14.5,17,20,25,26,27,22,18,15,14]

from matplotlib import pyplot as plt
#导入pyplot
x=range(2,26,2)
#数据在x轴的位置,是一个可迭代对象
y=[15,13,14.5,17,20,25,26,27,22,18,15,14]
#数据在y轴的位置,是一个可迭代对象
plt.plot(x,y)
#传入x和y,通过plot绘制出折线图
plt.show()
#在执行程序的时候展示图形


我可以做得更好
① 设置图片大小(高清无码大图)
② 保存到本地
③ 描述信息,比如x轴和y轴表示什么,这个图表示什么
④ 调整x或者y的刻度的间距
⑤ 线条的样式(比如颜色,透明度等)
⑥ 标记出特殊的点(比如告诉别人最高点和最低点在哪里)
⑦ 给图片添加一个水印(防伪,防盗)

from matplotlib import pyplot as pltfig=plt.figure(figsize=(20,8),dpi=80)
#①figsize-图片大小,dpi-图片像素x=range(2,26,2)
y=[15,13,14.5,17,20,25,26,27,22,18,15,14]plt.plot(x,y)
plt.xticks(range(2,25))
#④绘制x轴的刻度,plt.xticks(步长)
#步长k=[i/2 for i in range(4,49)]-稀疏变密集
#步长k=[m:n:2]-密集变稀疏
plt.yticks(range(min(y),max(y)+1))plt.savefig('./ti.png')
#②保存到当前路径下,也可以保存为svg矢量图格式,放大不会有锯齿plt.show()

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

from matplotlib import pyplot as plt
import random
x=range(0,120)
y=[random.randint(20,35) for i in range(120)]
fig=plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
plt.show()


设置中文显示
为什么无法显示中文?
答:matplotlib默认不支持中文字符,因为默认的英文字体无法显示汉字

那如何修改matplotlib的默认字体?
通过matplotlib下的font_manager可以解决

from matplotlib import font_manager
my_font=font_manager.FontProperties(fname='/System/Library/Fonts/PingFang.ttc')
plt.xticks(x[::5],_x_ticks[::5],rotation=90,fontproperties=my_font)

③描述信息

#④描述信息
plt.xlabel('时间',fontproperties=my_font)
plt.ylabel('温度 单位(℃)',fontproperties=my_font)
plt.title('10点到12点每分钟的气温变化情况',fontproperties=my_font)

问题:假设大家在30岁的时候,根据自己的实际情况,统计出来了从11岁到30岁每年交的女(男)朋友的数量如列表a,请绘制出该数据的折线图,以便分析自己每年交女(男)朋友的数量走势。
要求:
-y轴表示个数
-x轴表示岁数,比如11岁,12岁等

from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname=fname='/Ssystem/Library/Fonts/Pingfang.ttc')
plt.rcParams['font.sans-serif']=['SimHei']
y=[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
x=range(11,31)#设置图形大小
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
#设置刻度
_xtick_lables=['{}岁'.format(i) for i in x]
plt.xticks(x,_xtick_lables,fontproperties=my_font)
plt.yticks(range(0,9))#绘制网格
plt.grid(alpha=0.4)
#alpha:透明度#展示
plt.show()

问题:假设大家在30岁的时候,根据自己的实际情况,统计出来了你和同桌各自从11岁到30岁每年交的女(男)朋友的数量如列表a,请在一个图中绘制出该数据的折线图,以便比较自己和同桌20年间的差异,同时分析分析自己每年交女(男)朋友的数量走势。
a=[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
b=[1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
要求:
-y轴表示个数
-x轴表示岁数,比如11岁,12岁等

from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname=fname='/Ssystem/Library/Fonts/Pingfang.ttc')
plt.rcParams['font.sans-serif']=['SimHei']
y1=[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y2=[1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
x=range(11,31)#设置图形大小
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y1,label='自己',color='orange',linestyle=':')
plt.plot(x,y2,label='同桌',color='cyan',linestyle='-.')#设置刻度
_xtick_lables=['{}岁'.format(i) for i in x]
plt.xticks(x,_xtick_lables,fontproperties=my_font)
plt.yticks(range(0,9))#绘制网格
plt.grid(alpha=0.4,,linestyle=':')
#alpha:透明度#添加图例
plt.legend(prop=my_font,loc='upper left')#展示
plt.show()

源码:Ctrl+鼠标左键
颜色:可以上网查‘颜色代码

总结:前面我们都做了什么?

  1. 绘制了折线图(plt.plot)
  2. 设置了图片的大小和分辨率(plt.figure)
  3. 实现了图片的保存(plt.savefig)
  4. 设置了xy轴上的刻度和字符串(xticks)
  5. 解决了刻度稀疏和密集的问题(xticks)
  6. 设置了标题,xy轴的label(title,xlable,ylable)
  7. 设置了字体(font_manager, fontProperties,matplotlib.rc)
  8. 在一个图上绘制多个图形(plt多次plot即可)
  9. 为不同的图形添加图例

其他折线图模板:可以详见matplotlib官方网站的代码

3. 散点图/直方图/柱状图

(1) 四种图形介绍
折线图:以折线的上升或下降来表示统计数量的增减变化的统计图
特点:能够显示数据的变化趋势,反映事物的变化情况(变化)

直方图:由一系列高度不等的纵向条纹或线段表示数据分布的情况。
特点:绘制连续的数据,展示一组或多组数据的分布状况(统计)

条形图:排列在工作表的列或行中的数据可以绘制到条形图。
特点:绘制离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别(统计)

散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。
特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律

(2) 绘制条形图
问题1:假设你获取到了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据?

① 绘制竖着的柱形图:

from matplotlib import pyplot as plt#数据
a=['战狼2','速度与激情8','功夫瑜伽','西游伏妖篇','变形金刚5:\n最后的骑士','摔跤吧!爸爸','加勒比海盗5:\n死无对证','金刚:\n咕噜岛','极限特工:\n终极回归','生化危机6:\n终章','乘风破浪','神偷奶爸3','智取威虎山','大闹天竺','金刚狼3:\n殊死一战','蜘蛛侠:\n英雄归来','悟空传','银河护卫队2','情圣','新木乃伊']b=[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23] #单位:亿
# 数据来源:http://58921.com/alltime/2017#设置图形大小
plt.figure(figsize=(20,15),dpi=80)
#绘制条形图
plt.bar(a,b,width=0.3)
#plt.bar(range(len(a)),b,width=0.3)
#设置字符串到x轴
plt.xticks(range(len(a)),a,fontproperties='SimHei',rotation=90)
#保存图片
plt.savefig('./movie.png')
plt.show()

② 绘制横着的条形图:

from matplotlib import pyplot as plt#数据
a=['战狼2','速度与激情8','功夫瑜伽','西游伏妖篇','变形金刚5:最后的骑士','摔跤吧!爸爸','加勒比海盗5:死无对证','金刚:咕噜岛','极限特工:终极回归','生化危机6:终章','乘风破浪','神偷奶爸3','智取威虎山','大闹天竺','金刚狼3:殊死一战','蜘蛛侠:英雄归来','悟空传','银河护卫队2','情圣','新木乃伊']b=[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23] #单位:亿
# 数据来源:http://58921.com/alltime/2017#设置图形大小
plt.figure(figsize=(20,15),dpi=80)
#绘制条形图
plt.barh(a,b,height=0.3,color='orange')
#设置字符串到y轴
plt.yticks(range(len(a)),a,fontproperties='SimHei')
#保存图片
plt.grid(alpha=0.3)
plt.show()


总结
竖着的条形图:plt.bar(a,b,width=0.3)
横着的条形图:plt.barh(a,b,height=0.3,color=‘orange’)

问题2:假设你知道了列表a中电影分别在2017-09-14(b_14), 2017-09-15(b_15), 2017-09-16(b_16)三天的票房,为了展示列表中电影本身的票房以及同其他电影的数据对比情况,应该如何更加直观的呈现改数据?

from matplotlib import pyplot as plt
a=['猩球崛起3:终极之战','敦刻尔克','蜘蛛侠:英雄归来','战狼2']
b_16=[15746,312,4497,319]
b_15=[12357,156,2045,168]
b_14=[2358,399,2358,362]
#数据来源:http://www.cbooo.cn/moviedaybar_width=0.2x_14=list(range(len(a)))
x_15=[i+0.2 for i in x_14]
x_16=[i+0.2*2 for i in x_14]
#设置图形大小
plt.figure(figsize=(20,15),dpi=80)
#绘制条形图
plt.bar(a,b_14,width=bar_width,label='9月14日')
plt.bar(x_15,b_15,width=bar_width,label='9月15日')
plt.bar(x_16,b_16,width=bar_width,label='9月16日')
#plt.bar(range(len(a)),b,width=0.3)#设置x轴的刻度
plt.xticks(x_15,a,fontproperties='SimHei')#设置图例
plt.legend(prop='SimHei') #字体设置有点错误plt.show()

应用场景
-数量统计
-频率统计

(3) 绘制直方图
问题1:假设你获取了250部电影的时长(列表a中),希望统计出这些电影时长的分布状态(比如时长为100分钟到120分钟电影的数量,出现的频率)等信息,你应该如何呈现这些数据?

from matplotlib import pyplot as plta=[118, 120, 120, 91, 89, 83, 135, 126, 106, 83, 126, 84, 113, 116, 98, 100, 104, 94, 129, 115, 113, 120, 126, 105, 120, 111, 96, 137, 92, 114, 86, 97, 119, 109, 123, 107, 101, 130, 133, 115, 84, 105, 139, 97, 136, 133, 116, 124, 134, 107, 131, 117, 110, 134, 89, 81, 95, 113, 123, 133, 91, 114, 139, 80, 134, 87, 81, 94, 132, 121, 138, 116, 136, 135, 112, 123, 105, 117, 134, 81, 108, 90, 101, 119, 81, 132, 138, 107, 98, 97, 96, 130, 137, 129, 101, 125, 121, 114, 81, 116, 82, 138, 115, 115, 117, 108, 124, 134, 111, 131, 103, 110, 134, 133, 134, 96, 115, 80, 123, 117, 115, 116, 132, 117, 111, 97, 88, 80, 87, 109, 111, 117, 91, 115, 114, 122, 100, 85, 138, 101, 128, 130, 104, 122, 125, 105, 100, 128, 94, 82, 116, 108, 84, 127, 84, 131, 100, 91, 111, 139, 103, 127, 122, 108, 109, 119, 85, 97, 104, 131, 92, 97, 84, 113, 134, 140, 100, 110, 103, 119, 126, 108, 130, 97, 129, 128, 92, 104, 85, 99, 115, 102, 122, 96, 107, 130, 111, 113, 82, 138, 103, 127, 124, 99, 139, 87, 109, 134, 84, 90, 80, 92, 126, 124, 83, 113, 119, 83, 138, 130, 128, 117, 81, 123, 82, 135, 119, 80, 124, 83, 130, 112, 99, 102, 91, 119, 118, 97, 83, 123, 90, 133, 93, 131, 102, 100, 116, 122, 91, 120]# 计算组数:组数=极差/组距
d=5  #组距
num_bins=(max(a)-min(a))//d#设置图形大小
plt.figure(figsize=(20,8),dpi=80)
plt.hist(a,num_bins,normed=True)  #数据和组数,频率直方图
#hist传入需要统计的数据,以及组数即可#设置x轴的刻度
plt.xticks(range(min(a),max(a)+d,d))plt.grid()
plt.show()

问题2:在美国2004年人口普查发现有124 million的人在离家相对较远的地方工作。根据他们从家到上班地点所需要的时间,通过抽样统计(最后一列)出了下表的数据,这些数据能够绘制成直方图么?

from matplotlib import pyplot as plt#数据
interval=[0,5,10,15,20,25,30,35,40,45,60,90] #时间段,x轴
width=[5,5,5,5,5,5,5,5,5,15,30,60]  #组距
quantity=[836,2737,3723,3926,3596,1438,3273,642,824,613,215,57]  #频数
# 数据来源:https://en.wikipedia.org/wlkl/Histoggram
# 普查报告地址:http://www.census.gov/prod/2004pubs/c2kbr-33.pdf#设置图形大小
plt.figure(figsize=(20,8),dpi=80)plt.bar(range(12),quantity,width=1)  #设置x轴的刻度
_x=[i-0.5 for i in range(13)]
_xtick_labels=interval+[150]
plt.xticks(_x,_xtick_labels)plt.grid()
plt.show()#bar方法的使用
#原始数据才可以用直方图

直方图的应用场景
① 用户的年龄分布状态
② 一段时间内用户点击次数的分布状态
③ 用户活跃时间的分布状态

4. 画图工具

4.1 常见问题总结:
(1) 应该选择哪种图形来呈现数据
折线图:变化
条形图:离散数据
(2) matplotlib.plot(x,y):折线图
(3) matplotlib.bar(x,y):直方图
(4) matplotlib.scatter(x,y):散点图
(5) matplotlib.hist(data,bins,normed):条形图
(6) xticks 和 yticks 的设置:x,y轴的刻度
(7) label 和 title.grid 的设置
(8) 绘图的大小和保存图片

4.2 matplotlib使用流程:
(1) 明确问题
(2) 选择图形的呈现方式
(3) 准备数据
(4) 绘图和图形完善

4.3 更多的图形样式
matplotlib支持的图形是非常多的,如果有其他的需求,我们可以查看以下url地址:
matplotlib.
ECHARTS.

4.4 更多的绘图工具
(1) plotly: 可视化工具中的github,相比于matplotlib更加简单,图形更加漂亮,同时兼容matplotlib 和 pandas
使用用法:简单,照着文档写即可
plotly for python.

(2) seaborn

Python数据分析【1】:matplotlib库详细教程相关推荐

  1. python数据分析之matplotlib库(下)

    matplotlib基础 经过前面的学习,我们学会了绘制折线图以及一些相关的操作, 今天我们继续学习 由于前面我们学习了基础的语法及操作 折线图,散点图,条形图的方法都大同小异,这里我们直接上代码. ...

  2. Py之Matplotlib:python包之Matplotlib库图表绘制经验总结(中英文字体修改、横坐标文字进行横/纵向显示、控制坐标轴范围等)之详细攻略

    Py之Matplotlib:python包之Matplotlib库图表绘制经验总结(中英文字体修改.横坐标文字进行横/纵向显示.控制坐标轴范围等)之详细攻略 目录 1.Matplotlib库图表绘制包 ...

  3. Py之matplotlib:python包之matplotlib库图表绘制包的简介、安装、使用方法(matplotlib颜色大全)详细攻略

    Py之matplotlib:python包之matplotlib库图表绘制包的简介.安装.使用方法(matplotlib颜色大全)详细攻略 目录 matplotlib简介 matplotlib安装 m ...

  4. Py的docx库:Python操作docx文件的详细教程

    Py的docx库:Python操作docx文件的详细教程 docx库是一种Python库,它使得在Python中提取.编辑和创建Microsoft Word 2007 .docx文件变得容易.这个库具 ...

  5. Python数据分析(matplotlib、numpy、pandas)

    Python数据分析 1.matplotlib 1.1 什么是matplotlib 能将数据进行可视化,更直观的呈现 使数据更加客观,更有说服力 matplotlib:最流行的Python底层绘图库, ...

  6. Python系列 之 matplotlib库 基础知识

    Python系列 之 matplotlib库 基础知识学习 Pyplot 简单示例 中文显示问题 注册全局字体 font_manager.FontProperties注册字体 Figure Figur ...

  7. 二、Python数据挖掘(Matplotlib库)

    二.Python数据挖掘(Matplotlib库) 目录: 二.Python数据挖掘(Matplotlib库) 一.Matplotlib 简介 二.Matplotlib 理论基础 1.Matplotl ...

  8. 如何使用 Python 操作 .npy 文件?详细教程分享

    如何使用 Python 操作 .npy 文件?详细教程分享 .npy 文件是指 NumPy 存储数组数据的文件格式,它具有快速.高效和易存储等优点.在科学计算和机器学习领域中,.npy 文件的使用非常 ...

  9. Python条码识别:使用Python进行条形码识别的详细教程

    Python条码识别:使用Python进行条形码识别的详细教程 身处数字化时代,条形码作为重要的物流标识符,已经广泛应用于各行各业.对于条形码的识别,在Python中,有许多开源库可以使用,例如Zba ...

最新文章

  1. 多行字符串,带有多余的空格(保留缩进)
  2. 网易云信携手LiveVideoStackCon 2019,探索多媒体技术新世界
  3. PHP操作文件和目录的相关函数
  4. WCF学习笔记之序列化
  5. 数字图像处理基础与应用 第五章
  6. Java-旋转字符串
  7. Python全栈开发-Day2-Python基础2
  8. js根据本地文件路径上传文件(流上传)
  9. [2020-07]如何获取百度访客搜索关键字(竞价、推广、SEO)
  10. protobuf和json的对比
  11. AntD Selected 多选
  12. php程序员应具备的7种能力
  13. 康威定律,作为架构师还不会灵活运用?
  14. 1#操作系统#响应比
  15. Transfer Learning Toolkit (TLT) + DeepStream (DS)快速部署深度学习模型(以口罩检测为例)
  16. TX2安装ubuntu18,ROS
  17. Openssl中chacha20-poly1305的使用
  18. vue echarts中改变canvas长和宽 自适应
  19. 看透2500万人生老病死 米因大数据解开健康密码
  20. 在python中用seaborn.boxplot画图,以及带子分组的并排箱线图

热门文章

  1. ubuntu配置novnc通过web访问服务器
  2. 【HDU No. 1263】水果
  3. 微信小程序授权登录获取用户信息详解
  4. 【论坛】游戏开发大板上线公告
  5. 微信定向流量_联通回应单列微信上网记录:为定向流量业务
  6. 上海交通大学计算机考研复试 2006年(java)
  7. qq邮箱服务器host是什么
  8. 海龟 (turtle) 画图实战任务(五 ):输出逐渐变大的文字及根据用户输入的边数绘制多边形
  9. 算法题第10题-----唯一摩尔斯密码词,难度(中等)
  10. CSS不规则图形画法(clip-path)