适合小白的Matplotlib基本使用
目录
- 1、matplotlib三层结构
- 1.1 容器层
- 1.2 图像层
- 1.3 辅助显示层
- 2、折线图
- 2.1 绘制基本折线图
- 2.2 添加辅助线
- (1)解决matplotlib中文问题:
- 2.3 添加网格线
- 2.4 在同一个坐标系中绘制多条折线图
- (1)线条的颜色和风格:
- (2)显示图例说明:
- 2.5 在多个坐标系下绘制多个图像(面向对象的画图方法)
- (1)基本绘制
- (2)完善绘制图像
- 2.6 matplotlib绘制条形图
- 2.7 总结
- 3、常见图像绘制
- 3.1 常见图像的种类及意义
- 3.2 散点图绘制
- 3.3 柱状图绘制
- 3.4 小结
1、matplotlib三层结构
程序画图,也和我们手工画图一样,要有画板、画布、画图的工具等。所以我们学matplotlib画图之前,需要知道这个包是怎么划分这些结构的。下面看看matplotlib的三层结构:
(1)容器层:最下面的一层,其实就是画板、画布等等;
(2)图像层:根据数据绘制出来的图像;
(3)辅助层:如坐标轴、坐标轴的名称、网格线、图例、边框线、标题等。
下面看看matplotlib是怎么实现的:
1.1 容器层
作用:
1.2 图像层
1.3 辅助显示层
这三层结构理解了之后,我们接下来通过实际的例子来说明:
2、折线图
2.1 绘制基本折线图
案例:绘制2020年4月1日—2020年4月5日中国新增确诊病例的折线图。
数据:
time = [‘20200401’, ‘20200102’, ‘20200403’, ‘20200404’, ‘20200405’]
china = [93, 78, 73, 55, 75]
代码:
import matplotlib.pyplot as plt# 1.准备数据
time = ['20200401', '20200102', '20200403', '20200404', '20200405']
china = [93, 78, 73, 55, 75]# 2.创建画布
plt.figure(figsize=(5, 4), dpi=600) # figsize:调整画布的大小,dpi:分辨率# 3.绘制折线图
plt.plot(time, china) # 两个参数:第一个相当于x轴,第二个相当于y轴# 4.展示
plt.show()
结果:
2.2 添加辅助线
实现代码:
import matplotlib.pyplot as plt# 显示中文
font = {'family':'SimHei', 'weight':'bold', 'size':'16'}
plt.rc('font', **font) # 步骤一(设置字体的更多属性)
plt.rc('axes', unicode_minus=False) # 步骤二(解决坐标轴负数的负号显示问题)# 1.准备数据
time = ['20200401', '20200102', '20200403', '20200404', '20200405']
china = [93, 78, 73, 55, 75]# 2.创建画布
plt.figure(figsize=(5, 4), dpi=100) # figsize:调整画布的大小,dpi:分辨率# 3.绘制折线图
plt.plot(time, china)# 添加辅助显示层
# 添加x轴,y轴的刻度
xticks = ['4月1日', '4月2日', '4月3日', '4月4日', '4月5日',] # 这个变量名字可以变
plt.xticks(time, xticks) # 由于原来的time是字符串形式的,所以要传,保证对应
yticks = range(0, 101, 10)
plt.yticks(yticks) # china是数值形式,不用传
# 添加x轴,y轴的名称
plt.xlabel('时间')
plt.ylabel('新增确诊数量')
# 设置标题
plt.title('4月1日-4月5日新增数量')# 4.展示
plt.show()
结果:
(1)解决matplotlib中文问题:
如果不设置,中文就会显示为下面这样:
那怎么解决呢?接着看:
(1) 下载SimHei字体(或者其他支持中文显示的字体也可以):
https://pan.baidu.com/s/1GPh8vhn7ZsXfxv6zA4RWzQ
(2) 查看配置文件位置:
import matplotlib
print(matplotlib.matplotlib_fname) # 我的为D:\Anaconda3\lib\site-packages\matplotlib\mpl-data\matplotlibrc
(3) 将下载的SimHei.tff文件复制到
mpl-data目录下\font\tff
(4) 进入上述的目录,修改配置文件matplotlibrc,在尾部追加如下内容:
font.family :sans-serif
font.sans-serif :SimHei
axes.unicode_minus :False
(5) 删除matplotlib中的缓存文件(windows不需要):
rm -r ~/.matplotlib/*
或者
rm -r ~/.cache/matplotlib/*
(6) 重新启动 jupyter notebook
注意:我在上面的代码里写的也是一种方式,但这样每次都要加那一句话,上面的配置文件就算是一劳永逸的方法,看自己喜欢哪种方法就用哪种!
2.3 添加网格线
其实就下面一句话:
plt.grid(linestyle='--', alpha=0.5)
2.4 在同一个坐标系中绘制多条折线图
例子:
import matplotlib.pyplot as plt# 1.准备数据
time = ['20200401', '20200102', '20200403', '20200404', '20200405']
china = [93, 78, 73, 55, 75]
usa = [18697, 28599,32309,34444, 19236] # 2.创建画布
plt.figure(figsize=(5, 4), dpi=100) # figsize:调整画布的大小,dpi:分辨率# 3.绘制折线图
plt.plot(time, china, label='中国') # 中国
plt.plot(time, usa, linestyle='--', color='red', label='美国') # 美国# 添加图例
plt.legend(loc="best")# 添加辅助显示层
# 添加x轴,y轴的刻度
xticks = ['4月1日', '4月2日', '4月3日', '4月4日', '4月5日',] # 这个变量名字可以变
plt.xticks(time, xticks) # 由于原来的time是字符串形式的,所以要传,保证对应
# yticks = range(0, 101, 10)
# plt.yticks(yticks) # china是数值形式,不用传
# 添加x轴,y轴的名称
plt.xlabel('时间')
plt.ylabel('新增确诊数量')
# 设置标题
plt.title('4月1日-4月5日新增数量', fontsize=20)# 添加网格线
plt.grid(linestyle='--')# 4.展示
plt.show()
效果:
(1)线条的颜色和风格:
(2)显示图例说明:
# 绘制折线图
plt.plot(time, china, label='中国') # 中国
plt.plot(time, usa, linestyle='--', color='red', label='美国') # 美国# 添加图例
plt.legend(loc="best")
下面的这个就是图例位置的设置,可以用左边的字符串,也可以用右边的编码。
2.5 在多个坐标系下绘制多个图像(面向对象的画图方法)
关于axes子坐标系的更多方法: https://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes
- 注意:
plt.函数名()
相当于面向过程的画图方法,axes.set_方法名()
相当于面向对象的画图方法。
下面就一步一步的从头开始画:
(1)基本绘制
需求:绘制北京和上海的气温(气温数据随机生成)。
注意:为了和plt做对比,我把plt的绘图也画上了,只不过注释了而已。
代码:
# 0.准备数据(随机生成)
x = range(60)
y_shanghai = [random.uniform(15 ,18)for i in x] # 上海气温
y_baijin = [random.uniform(3 ,6)for i in x] # 北京气温# 1.创建画布
# plt.figure(figsize=(20, 8), dpi=100)
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100) # 表示一行两列# 2.绘制图像
# plt.plot(x, y_shanghai, linestyle="-.", label="上海", color="m")
# plt.plot(x, y_baijin, linestyle="--", label="北京", color="k")
axes[0].plot(x, y_shanghai, linestyle="-", label="上海", color="m")
axes[1].plot(x, y_baijin, linestyle="--", label="北京", color="k")# 3.展示
plt.show()
效果:
(2)完善绘制图像
下面就在前面的基础上,增加一些基本需求:
注意:我把使用plt画的方式也写下来了,只不过注释了,方便对比而已。
import matplotlib.pyplot as plt
import random# 0.准备数据(随机生成)
x = range(60)
y_shanghai = [random.uniform(15 ,18)for i in x] # 上海气温
y_baijin = [random.uniform(3 ,6)for i in x] # 北京气温# 1.创建画布
# plt.figure(figsize=(20, 8), dpi=100)
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100) # 表示一行两列# 2.绘制图像
# plt.plot(x, y_shanghai, linestyle="-.", label="上海", color="m")
# plt.plot(x, y_baijin, linestyle="--", label="北京", color="k")
axes[0].plot(x, y_shanghai, linestyle="-", label="上海", color="m")
axes[1].plot(x, y_baijin, linestyle="--", label="北京", color="k")# 2.1添加x,y轴的刻度
x_ticks_label = [f"11点{i}分" for i in x]# x轴的标签
y_ticks = range(40)
#修改x,y轴坐标刻度
# plt.xticks(x[::5], x_ticks_label[::5])# 数据替换,则直接写,字符串替换,还要把原来的写上,用来一一对应。
# plt.yticks(y_ticks[::5])
axes[0].set_xticks(x[::5])# x坐标
axes[0].set_yticks(y_ticks[::5]) # y坐标
axes[0].set_xticklabels(x_ticks_label[::5]) # 设置x轴的标签
axes[1].set_xticks(x[::5])# x坐标
axes[1].set_yticks(y_ticks[::5]) # y坐标
axes[1].set_xticklabels(x_ticks_label[::5]) # 设置x轴的标签# 2.2添加网格线
# plt.grid(True, linestyle='--', alpha=0.5)
axes[0].grid(True, linestyle='-.', alpha=0.5)
axes[1].grid(True, linestyle='--', alpha=0.5)# 2.3 添加描述信息
# plt.xlabel("时间")
# plt.ylabel("温度")
# plt.title("中午11点-12点某城市温度变化图", fontsize=20)
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("中午11点-12点上海温度变化图", fontsize=20)
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("中午11点-12点北京温度变化图", fontsize=20)# 2.4图像保存
plt.savefig("test1.png") # 切记要在show()之前调用# 2.5显示图例
# plt.legend(loc="best")
axes[0].legend(loc="best")
axes[1].legend(loc="best")# 3.展示
plt.show()
2.6 matplotlib绘制条形图
代码:
import matplotlib# 1.准备数据
names = ['西班牙', '美国', '意大利', '瑞士', '法国', '土耳其', '加拿大', '智利', '沙特阿拉伯'] values = [3861, 2614, 2275, 819, 758, 745, 256, 193, 160] # 2.创建画布
plt.figure(figsize=(10, 6), dpi=100)# 3.绘制条形图
plt.barh(names, values, height=0.5, color=['r', 'b', 'g', 'c', 'm', 'yellowgreen']) # height默认是0.8# 4.添加文本
dx = max(values) / 200
plt.text(values[0]+dx, 0, values[0]) # 这只是第一个,所有的都添加,要遍历# 注意:从下往上数的
for i, value in enumerate(values):plt.text(value+dx, i, value) # 第一、二参数表示横纵坐标,第三个参数为显示的值# 5.展示
plt.show()
效果:
2.7 总结
3、常见图像绘制
3.1 常见图像的种类及意义
常见图像的种类及意义:
下面看几种常用的:
3.2 散点图绘制
代码:
import matplotlib.pyplot as plt# 显示中文
font = {'family':'SimHei', 'weight':'bold', 'size':'16'}
plt.rc('font', **font) # 步骤一(设置字体的更多属性)
plt.rc('axes', unicode_minus=False) # 步骤二(解决坐标轴负数的负号显示问题)# 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=(5, 4), dpi=100)# 2.绘制图像
plt.scatter(x, y)# 3.图像显示
plt.show()
效果:
3.3 柱状图绘制
代码:
import matplotlib.pyplot as plt# 显示中文
font = {'family':'SimHei', 'weight':'bold', 'size':'16'}
plt.rc('font', **font) # 步骤一(设置字体的更多属性)
plt.rc('axes', unicode_minus=False) # 步骤二(解决坐标轴负数的负号显示问题)# 0.准备数据
#电影名字
movie_name = ["雷神3:诸神黄昏","正义联盟","东方快车谋杀案","寻梦环游记","全球风暴","降魔传","追捕","七十七天","密战","狂兽","其它"]
#横坐标
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, color=['r', 'g', 'b', 'k', 'm', 'c', 'y', 'g'], width=0.7)
# 2.1修改x轴显示
plt.xticks(x, movie_name)
# 2.2添加网格
plt.grid(linestyle='--', alpha=0.7)
# 2.3添加标题
plt.title("电影票房收入对比")# 3.图像显示
plt.show()
效果:
3.4 小结
若有用,欢迎点赞,若有错,请指正,谢谢!
适合小白的Matplotlib基本使用相关推荐
- 适合小白的Python学习大纲
IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰,但是,我们要清楚:淘汰的永远只是那些初级水平的从业者,过硬技术的从业者永远都是稀缺的.因此对于学习,我们还是要踏踏实 ...
- python画简便的图-最适合小白学的花色玩Python折线图|画个天气预报
原标题:最适合小白学的花色玩Python折线图|画个天气预报 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业 ...
- python画双折线图-最适合小白学的花色玩Python折线图|画个天气预报
原标题:最适合小白学的花色玩Python折线图|画个天气预报 这是菜鸟学Python的第102篇原创文章 前面写一篇关于数据可视化的入门开篇,简单的介绍了一下Matplotlib的使用(),今天我们进 ...
- 北京python培训班价格-北京Python培训班,为什么Python超适合小白学习
原标题:北京Python培训班,为什么Python超适合小白学习 每次在网上看到小白提问:零基础学编程,哪门编程语言更容易上手? 其实这个问题有两种回答,一是多去试试,常见的语言只有那么几种,挨个试 ...
- 从小白到精通python要多久-超适合小白的python新手教程
python介绍 这是我们专门为 小白 量身打造的Python新手教程,具有如下特点: 全视频,手把手,零起点,项目实例,基于船新的Python 版本. Python是一种计算机程序设计语言.你可能已 ...
- 超适合小白的python新手教程
python介绍 这是我们专门为 小白 量身打造的Python新手教程,具有如下特点: 全视频,手把手,零起点,项目实例,基于船新的Python 版本. Python是一种计算机程序设计语言.你可能已 ...
- win10下安装Ubuntu18.4双系统(适合小白)
win10下安装Ubuntu18.4双系统(适合小白) 注:本篇为传统MBR引导方式下安装. 查了很多博客,有的地方说法都不同,导致踩了一些坑.所以大家参考的时候还是得对自己的电脑配置等要具体情况具体 ...
- 单机 docker 部署fastfds_云服务器使用docker可视化一键部署Wrodpress个人博客,操作简单,适合小白...
原文链接在我的博客: 教你云服务器使用docker可视化一键部署Wrodpress个人博客,操作简单,适合小白 - Kyellow's blogkyellow.gitee.io 前段时间领取了一台云 ...
- python中小学生编程学习-推荐几个适合小白学习Python的免费网站
9gd少儿编程网-Scratch_Python_教程_免费儿童编程学习平台 想要学好python,只靠看Python相关的书籍是远远不够的!互联网时代,我们还要充分利用网络上的免费资源,不然怎样成为一 ...
最新文章
- Java黑皮书课后题第8章:**8.36(拉丁方阵)拉丁方阵是一个n*n的数组,其中有n个不同的拉丁字母,并且每个拉丁字母恰好只在每行和每列中出现一次。编写一个程序,提示用户输入数字n和字符数组
- Java黑皮书课后题第2章:*2.8(当前时间)程序清单2-7给出了显示当前格林尼治时间的程序。修改这个程序,提示用户输入相对于GMT的时区偏移量,显示在这个特定时区的时间
- sql server 修改表字段
- matlab光盘映像文件可以删除吗_DVD-Cloner 2020 for mac(DVD光盘刻录工具) 7.00.715
- 试用期java_Java 7试用资源
- 关于HbSrv.exe
- 如何开启和使用windows 10中的Hyper-v
- java 通过模板替换pdf_word模板替换方案 PDF 下载
- PMBOK(第六版) PMP笔记——第十章(项目沟通管理)
- JAVA面向对象-----接口与类、接口之间的关系
- (01)VTK读取OBJ格式模型
- 人工智能火灾报警器_使用AI进行准确的火灾预测
- Pandas数据库数据抽取
- wps居中对齐不在中间_如何解决wps表格居中调整
- DDD之一年级小学生作业辅导
- 程序员直男也有的浪漫,快来给朋友制作一款定时微信推送服务吧
- 《dota2》地精修补匠tinker路人攻略
- linux 怎么看浏览器,Linux下浏览器比比看
- python--爬虫--积累--多图片网站抓取加速方案和调优记录
- 五千字长文为你揭秘滴滴共享出行派单算法原理(干货)