上一篇我们净玩折线图了,这一篇简单的把其他常用的图画一画,当然我离大佬们绘制二元函数还有很长的路要走…这些还暂时够用

绘制散点图

假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间(天)变化的某种规律?

a  =  [11, 17, 16, 11, 12, 11, 12, 6, 6, 7, 8, 9, 12, 15, 14, 17, 18, 21, 16, 17, 20, 14, 15, 15, 15, 19, 21, 22, 22, 22, 23]
b  =  [26, 26, 28, 19, 21, 17, 16, 19, 18, 20, 20, 19, 22, 23, 17, 20, 21, 20, 22, 15, 11, 15, 5, 13, 17, 10, 11, 13, 12, 13, 6]
from matplotlib import pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']y_3 = [11, 17, 16, 11, 12, 11, 12, 6, 6, 7, 8, 9, 12, 15, 14, 17, 18, 21, 16, 17, 20, 14, 15, 15, 15, 19, 21, 22, 22,22, 23]
y_10 = [26, 26, 28, 19, 21, 17, 16, 19, 18, 20, 20, 19, 22, 23, 17, 20, 21, 20, 22, 15, 11, 15, 5, 13, 17, 10, 11, 13,12, 13, 6]x_3 = range(1, 32)
x_10 = range(51, 82)# 设置图形大小
plt.figure(figsize=(20, 8), dpi=80)# 使用scatter方法绘制散点图
plt.scatter(x_3, y_3, label="3月份")
plt.scatter(x_10, y_10, label="10月份")# 调整x轴的刻度
_x = list(x_3) + list(x_10)
_xtick_labels = ["3月{}日".format(i) for i in x_3]
_xtick_labels += ["10月{}日".format(i - 50) for i in x_10]
plt.xticks(_x[::3], _xtick_labels[::3], rotation=45)# 添加图例
plt.legend(loc="upper left")# 添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("标题")# 保存
plt.savefig("./t1.png")# 展示
plt.show()

左边是三月份,右边是10月份

散点图的更多应用场景

  • 不同条件(维度)之间的内在关联关系
  • 观察数据的离散聚合程度

绘制条形图

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

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]
from matplotlib import pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']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]# 设置图形大小
plt.figure(figsize=(20, 10), dpi=80)
# 绘制条形图
plt.bar(range(len(a)), b, width=0.3)
# 设置字符串到x轴
plt.xticks(range(len(a)), a, rotation=45)plt.savefig("./t1.png")# 展示
plt.show()

这个图x轴上的字符串长,让我们换一种方式

from matplotlib import pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']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]# 设置图形大小
plt.figure(figsize=(20, 10), dpi=80)
# 绘制条形图
plt.barh(range(len(a)), b, height=0.3, color="orange")
# 设置字符串到x轴
plt.yticks(range(len(a)), a)plt.grid(alpha=0.3)plt.savefig("./t1.png")# 展示
plt.show()

可以看到,唯一的区别就是bar变成了barh,图像就是横过来的

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

a = ["猩球崛起3:终极之战", "敦刻尔克", "蜘蛛侠:英雄归来", "战狼2"]
b_16 = [15746, 312, 4497, 319]
b_15 = [12357, 156, 2045, 168]
b_14 = [2358, 399, 2358, 362]
from matplotlib import pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']a = ["猩球崛起3:终极之战", "敦刻尔克", "蜘蛛侠:英雄归来", "战狼2"]
b_16 = [15746, 312, 4497, 319]
b_15 = [12357, 156, 2045, 168]
b_14 = [2358, 399, 2358, 362]x_14 = list(range(len(a)))
# 在x_14的基础上偏移0.2
x_15 = [i + 0.2 for i in x_14]
# 在x_15的基础上偏移0.2
x_16 = [i + 0.2 * 2 for i in x_14]
# 条的宽度是0.2,这样子他们三个就是紧挨在一起的了
bar_width = 0.2# 设置图形大小
plt.figure(figsize=(20, 10), dpi=80)
# 绘制条形图
plt.bar(x_14, 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.legend()# 设置字符串到x轴
plt.xticks(x_15, a)plt.grid(alpha=0.3)plt.savefig("./t1.png")# 展示
plt.show()

条形图的更多应用场景

  • 数量统计
  • 频率统计(市场饱和度)

绘制直方图

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

a = [131,  98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115,  99, 136, 126, 134,  95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117,  86,  95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123,  86, 101,  99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140,  83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144,  83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137,  92,121, 112, 146,  97, 137, 105,  98, 117, 112,  81,  97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112,  83,  94, 146, 133, 101,131, 116, 111,  84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]
from matplotlib import pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']a=[131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115,  99, 136, 126, 134,  95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117,  86,  95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123,  86, 101,  99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140,  83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144,  83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137,  92,121, 112, 146,  97, 137, 105,  98, 117, 112,  81,  97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112,  83,  94, 146, 133, 101,131, 116, 111,  84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]# 计算组数
d = 3  # 组距
num_bins = (max(a) - min(a)) // d# 设置图形大小
plt.figure(figsize=(20, 10), dpi=80)
# 传入需要统计的数据,以及组数即可
plt.hist(a, num_bins)# 可以传入一个列表,长度为组数,值为分组依据,当组距不均匀的时候使用
# plt.hist(a, [min(a) + 1 * bin_width for i in range(num_bins)])# normed: bool, 是否需要绘制频率分布直方图,默认为频数直方图
# plt.hist(a, num_bins, normed=1)# 设置x轴的刻度
plt.xticks(range(min(a), max(a) + d, d))plt.grid(alpha=0.3)plt.savefig("./t1.png")

好的,问题又来咯

把数据分为多少组进行统计???

组数要适当,太少会有较大的统计误差,大多规律不明显

组数:将数据分组,当数据在100个以内时,按数据多少常分5-12组。
组距:指每个小组的两个端点的距离
组数=极差组距=max(a)−min(a)bin_width组数 = \frac{极差}{组距} = \frac{max(a) - min(a)}{bin\_width} 组数=组距极差​=bin_widthmax(a)−min(a)​

那么问题又双叒叕来了

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

interval = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 60, 90]
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, 47]
from matplotlib import pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']interval = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 60, 90]
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, 47]# 设置图形大小
plt.figure(figsize=(20, 10), dpi=80)
plt.bar(range(len(quantity)), quantity, width=1)# 设置x轴的刻度
_x = [i - 0.5 for i in range(13)]
_xtick_labels = interval + [150]
plt.xticks(_x, _xtick_labels)plt.grid(alpha=0.4)plt.savefig("./t1.png")

注意审题了!!

前面的问题问的是什么呢?
问的是:哪些数据能够绘制直方图

前面的问题中给出的数据都是统计之后的数据,所以为了达到直方图的效果,需要绘制条形图
所以:一般来说能够使用plt.hist方法的的是那些没有统计过的数据

直方图更多应用场景

  • 用户的年龄分布状态
  • 一段时间内用户点击次数的分布状态
  • 用户活跃时间的分布状态

matplotlib常见问题总结

  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的设置
  7. label和titile,grid的设置
  8. 绘图的大小和保存图片

matplotlib使用的流程总结

  1. 明确问题
  2. 选择图形的呈现方式
  3. 准备数据
  4. 绘图和图形完善

matplotlib更多的图形样式

matplotlib支持的图形是非常多的,如果有其他的需求,我们可以查看一下url地址:http://matplotlib.org/gallery/index.html

更多的绘图工具

plotly:可视化工具中的github,相比于matplotlib更加简单,图形更加漂亮,同时兼容matplotlib和pandas
使用用法:简单,照着文档写即可(照着文档CV即可)
文档地址: https://plot.ly/python/

有人等烟雨,有人怪雨急,有人在等伞,有人等雨停。
“总有人翻山越岭为你而来”
Macsen Chu

matplotlib基本使用(二)相关推荐

  1. html中地图的绘制toolbars,tkinter内嵌Matplotlib系列(二)之函数曲线绘制

    目录 前言 前一章节,我们解读了tkinter内嵌Matplotlib的教程,了解其内嵌的原理,就是在tkinter创建matplotlib的画布控件,再利用其返回的画布对象进行绘图,其他附加功能,使 ...

  2. 4.12Python数据处理篇之Matplotlib系列(十二)---绘图风格的介绍

    目录 目录 前言 (一)不同风格 1.说明: 2.使用: 3.代码使用: (二)例子演示 1.dark_background 2.bmh 3.fivethirtyeight 4.ggplot 5.gr ...

  3. Matplotlib 绘图 (二)

    Matplotlib 绘制箱线图 (一) Matplotlib 绘制柱状图 (二) Matplotlib 绘制箱线图 参考文献: 1.https://www.cnblogs.com/shanger/p ...

  4. matplotlib+numpy绘制二维条形直方图

    代码源于: Python数据分析与挖掘实战 随机生成有1000个元素的服从正态分布的数组,分成10组绘制直方图 #-*- coding: utf-8 -*-import matplotlib.pypl ...

  5. 【Matplotlib】(二)图例legend

    Matplotlib 的 Legend 图例就是为了帮助我们展示每个数据对应的图像名称,更好的让读者认识到你的数据结构. 如图,红色标注部分就是 Legend 图例. 在之前的一篇文章 Matplot ...

  6. 2-4 Numpy+Matplotlib可视化(二)

    自定义绘图 1 # -*-coding:utf-8-*- 2 # !/usr/bin/env python 3 # Author:@vilicute 4 5 import numpy as np 6 ...

  7. 【Python】Matplotlib画图(二)——根据函数公式画图

    环境 Python3 Mac os 代码 # coding:utf-8 """ Author: roguesir Date: 2017/8/30 GitHub: http ...

  8. matplotlib模块总结二【多种类型图的绘制】

    多种类型图的绘制 1. 折线图 2. 散点图 3. 条形图 4. 直方图 5. 饼图 6. 等高线图 7. 热力图 8. 网状图 9. 图像部分填充 10. 对数图像 11. 极坐标图像 12. 散点 ...

  9. ubuntu下matplotlib 升级

    问题描述 查看matplotlib 版本信息的方法 总结 问题描述 在使用 matplotlib 画 violinplot 这个图形的时候报错了.出现了下面的错误提示: AttributeError: ...

最新文章

  1. 近期活动盘点:第一届“数据故事计划”、“新世界,由你造”阿里菜鸟2019实习生招聘...
  2. PHP经典乱码“口”字与解决办法
  3. socket 编程入门教程(四)TCP应用:1、构建echo服务器
  4. 开发日记-20190911 关键词 C代码实现shell ftw命令
  5. python到底是干嘛用的-python到底能做什么
  6. 主流手机分辨率 尺寸 操作系统
  7. ad域管理与维护_AD域管理员账号下发
  8. python---可执行文件的转换
  9. 2021-06-16单例模式详解
  10. 学习环境搭建:UDK2017 下载以及编译
  11. java 缓存 框架_5个常用的Java分布式缓存框架
  12. bzoj 3709 [PA2014]Bohater
  13. 【JIRA学习】 研发项目管理工具工时管理-插件Tempo
  14. c语言程序如何防止盗用,如何用C语言程序盗取QQ密码
  15. 叶俊|从人类基因本能谈到赞美的力量|麻辣总裁幽默SHOW嗨翻全场
  16. 论文笔记1:Fast and Robust Multi-Person 3D Pose Estimation from Multiple Views
  17. java简单学生成绩系统_JAVA 实现简单的学生成绩管理系统
  18. box-shadow上下左右四个边框设置阴影样式
  19. MacBook nice软件
  20. 不一定终身受雇,但要终身学习

热门文章

  1. Arduino提高篇07—超声波测距
  2. 小红书推广!如何精准投放小红书KOL
  3. java模拟转账_事务-模拟银行用户转账
  4. 基于市场看中国手游发展大环境
  5. LayUi 折叠表格
  6. 安搭Share:苹果首款自研芯片Mac来了:11月11日秋季第三场发布会
  7. c语言scanf %4c,scanf(%3c%4c,a,b);当输入ABCDEFGH时 a b的值分别是?怎么来的?
  8. 技术美术面试问题整理
  9. python语言开发的软件有哪些-软件开发常用的五大编程语言有哪些
  10. simulator相关