Matplotlib 精简实例入门
Matplotlob 简明实例入门

通过几个实例,快速了解matplotlib.pyplot 中最为常见的折线图,散点图,柱状图,直方图,饼图的用法
如果您需要更为详细的内容,请参考官方文档:
https://matplotlib.org/gallery/
import matplotlib.pyplot as plt
import random
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
案例1:显示温度变化状况
# 0.生成数据
x = range(60)
y_shanghai = [random.uniform(10, 15) for i in x]
# 1.创建画布
plt.figure(figsize=(20,8), dpi=100)
# 2.图形绘制
plt.plot(x, y_shanghai)
## 2.1添加x,y轴刻度
y_ticks = range(40)
x_ticks_labels = ['11点{}分'.format(i) for i in x]
plt.xticks(x[::5], x_ticks_labels[::5])
plt.yticks(y_ticks[::5])
# 2.2 显示网格 ,True可以不给,后面有其他值默认为True
plt.grid(True, linestyle='--', alpha=0.7)
# 2.3 添加描述信息
plt.xlabel('时间', fontsize=16)
plt.ylabel('温度', fontsize=16)
plt.title('中午温度变化图示', fontsize=20)
# 3.保存图形
# plt.savefig('./data/temperature.png')
# 4.图形展示, 会释放内存中的资源
plt.show()

案例2. 同一个坐标系中绘制多个图像
# 0.新增北京温度数据
x = range(60)
y_beijing = [random.uniform(1, 3) for i in x]
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2.绘制折线图
# 2.1 绘制x, y刻度
x_ticks = ['11点{}分'.format(i) for i in x]
y_ticks = range(40)
plt.xticks(x[::5], x_ticks[::5])
plt.yticks(y_ticks[::1])
# 2.2 绘制坐标轴描述
plt.xlabel('时间', fontsize=16)
plt.ylabel('温度', fontsize=16)
plt.title('北京上海两地温度变化图', fontsize=20)
# 2.3 绘制网格线
plt.grid(True, linestyle='--', alpha=0.7)
# 3 绘制图形
plt.plot(x, y_beijing, color='c', linestyle='-.',label='北京')
plt.plot(x, y_shanghai, color='m', linestyle='--',label='上海')
# 4. 绘制图例, 需要在绘制图形时指定label
plt.legend(loc='best')
# 5. 保存图片,需要在plt.show()释放内存资源之前
plt.savefig('./data/北京上海两地气温变化图.png')
# 5.显示图像
plt.show()

案例3. 多个坐标系显示(子图)
# 0.获取数据
x = range(60)
y_beijing = [random.uniform(1, 5) for i in x]
y_shanghai = [random.uniform(15, 25) for i in x]
# 1.创建画布
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)
# 2.绘制图像
axes[0].plot(x, y_beijing, label='北京')
axes[1].plot(x, y_shanghai, label='上海', color='c', ls='--')
# 2.1 绘制刻度
x_ticks_label = ['11点{}分'.format(i) for i in x]
y_ticks = range(40)
# 先设定数据标签set_xticks, 然后再改为字符串set_xticklabels (不是xtickslabels !!)
axes[0].set_xticks(x[::5])
axes[0].set_xticklabels(x_ticks_labels[::5])
axes[0].set_yticks(y_ticks[::5])
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(x_ticks_labels[::5])
axes[1].set_yticks(y_ticks[::5])
# 2.2 设定网格显示
axes[0].grid(True, linestyle='--', alpha=0.5)
axes[1].grid(True, linestyle='-.', alpha=0.5)
# 2.3 添加描述信息
axes[0].set_xlabel('时间', fontsize=16)
axes[0].set_ylabel('北京温度', fontsize=16)
axes[0].set_title('北京温度变化图', fontsize=20)
axes[1].set_xlabel('时间', fontsize=16)
axes[1].set_ylabel('北京温度', fontsize=16)
axes[1].set_title('北京温度变化图', fontsize=20)
# 2.4 添加图例
axes[0].legend(loc=0)
axes[1].legend(loc=0)
# 3. 保存图像
plt.savefig('北京上海两地温度子图.png')
# 4. 显示图像
plt.show()

案例4.常见其他图形绘制
4.1 散点图绘制
# 0.准备数据
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01, 20.67, 288.64,
163.56, 120.06, 207.83, 342.75, 147.9 , 53.06, 224.72, 29.51,
21.61, 483.21, 245.25, 399.25, 343.35]
y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61, 24.9 , 239.34,
140.32, 104.15, 176.84, 288.23, 128.79, 49.64, 191.74, 33.1 ,
30.74, 400.02, 205.35, 330.64, 283.45]
# 1. 创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2.绘制散点图
plt.scatter(x, y)
# 3. 显示图形
plt.show()

4.2 柱状图绘制
# 0. 准备数据(以某月电影票房为例)
movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它']
# x, y 分别为电影名称和票房
x = range(len(movie_name))
y = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2.绘制柱状图
# 可以添加每个的宽度和颜色(列表输入)
plt.bar(x, y, width=0.5, color=['b','r','g','y','c','m','y','k','c','g','b'])
# 2.1 修改x轴刻度
# plt.xticks(ticks=x, labels=movie_name) # ticks -> 原刻度, labels->新标签
plt.xticks(x, movie_name, fontsize=15)
# 2.2 网格
plt.grid(ls='--', lw=1, alpha=0.5) # ls->linestyle, lw->linewidth
# 2.4 添加标题和坐标轴名称
plt.title('电影票房对比')
plt.xlabel('电影名称')
plt.ylabel('上映票数')
# 3.显示图像
plt.show()

4.3 直方图
# 0.生成数据
x = [random.uniform(0, 100) for i in range(200)]
# 1.绘制图形
# 直方图用来表示数据的分布,横轴表示数据范围,总之表示分布情况, bins表示分组数量
# y轴表示每个组的占比(百分数)或者数量
plt.hist(x, bins=30)
# 2.显示图形
plt.show()

4.4 饼状图
# 0.获取数据
# 以不同学科的成绩占比
label_names = ['语文', '数学', '外语', '政治', '物理']
# 每部分的占比(字段换算成百分比)
rate = [1,2,3,4,5]
# 1.绘制图像
# autopct参数为显示占比百分数
plt.pie(rate, labels=label_names, colors=['b','r','g','c','pink'], autopct='%1.2f%%')
plt.show()
# 参考资料:
# https://matplotlib.org/gallery/pie_and_polar_charts/pie_features.html#sphx-glr-gallery-pie-and-polar-charts-pie-features-py

Matplotlib 精简实例入门的更多相关文章
- Pandas 精简实例入门
目录 0. 案例引入 1. Pandas 主要数据结构 1.1 DataFrame 1.1.1 设置索引 1.1.2 重设索引 1.1.3 以某列为索引 1.2 MultiIndex 1.3 Seri ...
- matplotlib画图实例:pyplot、pylab模块及作图參数
http://blog.csdn.net/pipisorry/article/details/40005163 Matplotlib.pyplot画图实例 {使用pyplot模块} matplotli ...
- XML实例入门2
工具:notepad++.VS2008(MSXML6.0) 来自msdn的例子(经过修改,因为升级到MSXML6.0,有些关键字不太一样了), 需要文件books.xml,books.vsd(博客只支 ...
- Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)
1. 框架代码 用 PyCharm 新建一个名为 SimplePaintApp 的项目,然后新建一个名为 simple_paint_app.py 的 Python 源文件, 在代码编辑器中,输入以下框 ...
- Kivy crash 中文教程 实例入门 1. 第1个应用 Kivy App (Making a simple App)
1. 空白窗口 在 PyCharm 中创建一个名为 TutorialApp 的项目,然后在该项目中新建了个名为 tutorial_app.py 的 Python 源文件,在 PyCharm 的代码编 ...
- Kivy 中文教程 实例入门 简易画板 (Simple Paint App):3. 随机颜色及清除按钮
1. 随机颜色 通过前面的教程,咪博士已经带大家实现了画板的绘图功能.但是,现在画板只能画出黄色的图案,还十分单调,接下来咪博士就教大家,如何使用随机颜色,让画板变得五彩斑斓. 改进后的代码如下: f ...
- Kivy 中文教程 实例入门 简易画板 (Simple Paint App):2. 实现绘图功能
1. 理解 kivy 坐标系统 上一节中,咪博士带大家实现了画板程序的基础框架,以及一个基本的自定义窗口部件(widget).在上一节的末尾,咪博士留了一道关于 kivy 坐标系统的思考题给大家.通过 ...
- Kivy 中文教程 实例入门 简易画板 (Simple Paint App):0. 项目简介 & 成果展示
本教程咪博士将带领大家学习创建自己的窗口部件 (widget).最终,我们完成的作品是一个简易的画板程序. 当用 kivy 创建应用时,我们需要仔细思考以下 3 个问题: 我们创建的应用需要处理什么数 ...
- React实例入门教程(1)基础API,JSX语法--hello world
前 言 毫无疑问,react是目前最最热门的框架(没有之一),了解并学习使用React,可以说是现在每个前端工程师都需要的. 在前端领域,一个框架为何会如此之火爆,无外乎两个原因:性能优秀,开发 ...
随机推荐
- C++全排列函数next_permutation()和prev_permutation()
头文件:#include<algorithm> * * * 1. next_permutation(): next_permutation()函数的返回类型是bool类型. 即:如果有一个 ...
- 360若真入股HTC 到底是谁来拯救谁
到底是谁来拯救谁" title="360若真入股HTC 到底是谁来拯救谁"> 我总是持有一种观点,那就是拯救是相互的.就像老师拯救"堕落"学生, ...
- 自研测试框架ktest介绍(适用于UI和API)
iTesting,爱测试,爱分享 在自动化测试的过程中,测试框架是我们绕不过去的一个工具,无论你是不需要写代码直接改动数据生成脚本,还是你需要检查测试结果甚至持续集成,测试框架都在发挥它的作用. 不同 ...
- 添砖加瓦:简述ELK部署
1.准备工作 ELK下载:https://www.elastic.co/downloads/ jdk version:1.8.0_162 2.环境搭建 ElasticSearch: (1)不能使用ro ...
- iPhone 8价格狂跌:是国产手机的胜利,还是苹果的黄昏
8价格狂跌:是国产手机的胜利,还是苹果的黄昏" title="iPhone 8价格狂跌:是国产手机的胜利,还是苹果的黄昏"> 其实呢,这年头发布新款智能 ...
- hexo及next主题修改
通过npm uninstall <package>命令,你可以将node_modules目录下的某个依赖包移除: 1 npm uninstall 包名 要从package.json文件的依 ...
- install jekyll
最直接的方法就是运行快速指南中的命令: gem install jekyll 这个时候会提示: Command 'gem' not found, but can be installed with: ...
- SpringBoot入门系列(一)如何快速创建SpringBoot项目
这段时间也没什么事情,所以就重新学习整理了Spring Boot的相关内容.今天开始整理更新Spring Boot学习笔记,感兴趣的朋友可以关注我的博客:https://www.cnblogs.com ...
- 聊一聊MyBatis 和 SQL 注入间的恩恩怨怨
整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...
- JavaScript判断一个对象是否为空
本文介绍了判断一个对象是否为空的几种方法 测试用例 test1 = 1; test2 = {}; test3 = {a:1,b:2} 1. 判断Object.keys()的长度 function _i ...