目录

  • 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基本使用相关推荐

  1. 适合小白的Python学习大纲

    IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰,但是,我们要清楚:淘汰的永远只是那些初级水平的从业者,过硬技术的从业者永远都是稀缺的.因此对于学习,我们还是要踏踏实 ...

  2. python画简便的图-最适合小白学的花色玩Python折线图|画个天气预报

    原标题:最适合小白学的花色玩Python折线图|画个天气预报 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业 ...

  3. python画双折线图-最适合小白学的花色玩Python折线图|画个天气预报

    原标题:最适合小白学的花色玩Python折线图|画个天气预报 这是菜鸟学Python的第102篇原创文章 前面写一篇关于数据可视化的入门开篇,简单的介绍了一下Matplotlib的使用(),今天我们进 ...

  4. 北京python培训班价格-北京Python培训班,为什么Python超适合小白学习

    原标题:北京Python培训班,为什么Python超适合小白学习 ​每次在网上看到小白提问:零基础学编程,哪门编程语言更容易上手? 其实这个问题有两种回答,一是多去试试,常见的语言只有那么几种,挨个试 ...

  5. 从小白到精通python要多久-超适合小白的python新手教程

    python介绍 这是我们专门为 小白 量身打造的Python新手教程,具有如下特点: 全视频,手把手,零起点,项目实例,基于船新的Python 版本. Python是一种计算机程序设计语言.你可能已 ...

  6. 超适合小白的python新手教程

    python介绍 这是我们专门为 小白 量身打造的Python新手教程,具有如下特点: 全视频,手把手,零起点,项目实例,基于船新的Python 版本. Python是一种计算机程序设计语言.你可能已 ...

  7. win10下安装Ubuntu18.4双系统(适合小白)

    win10下安装Ubuntu18.4双系统(适合小白) 注:本篇为传统MBR引导方式下安装. 查了很多博客,有的地方说法都不同,导致踩了一些坑.所以大家参考的时候还是得对自己的电脑配置等要具体情况具体 ...

  8. 单机 docker 部署fastfds_云服务器使用docker可视化一键部署Wrodpress个人博客,操作简单,适合小白...

    原文链接在我的博客: 教你云服务器使用docker可视化一键部署Wrodpress个人博客,操作简单,适合小白 - Kyellow's blog​kyellow.gitee.io 前段时间领取了一台云 ...

  9. python中小学生编程学习-推荐几个适合小白学习Python的免费网站

    9gd少儿编程网-Scratch_Python_教程_免费儿童编程学习平台 想要学好python,只靠看Python相关的书籍是远远不够的!互联网时代,我们还要充分利用网络上的免费资源,不然怎样成为一 ...

最新文章

  1. Java黑皮书课后题第8章:**8.36(拉丁方阵)拉丁方阵是一个n*n的数组,其中有n个不同的拉丁字母,并且每个拉丁字母恰好只在每行和每列中出现一次。编写一个程序,提示用户输入数字n和字符数组
  2. Java黑皮书课后题第2章:*2.8(当前时间)程序清单2-7给出了显示当前格林尼治时间的程序。修改这个程序,提示用户输入相对于GMT的时区偏移量,显示在这个特定时区的时间
  3. sql server 修改表字段
  4. matlab光盘映像文件可以删除吗_DVD-Cloner 2020 for mac(DVD光盘刻录工具) 7.00.715
  5. 试用期java_Java 7试用资源
  6. 关于HbSrv.exe
  7. 如何开启和使用windows 10中的Hyper-v
  8. java 通过模板替换pdf_word模板替换方案 PDF 下载
  9. PMBOK(第六版) PMP笔记——第十章(项目沟通管理)
  10. JAVA面向对象-----接口与类、接口之间的关系
  11. (01)VTK读取OBJ格式模型
  12. 人工智能火灾报警器_使用AI进行准确的火灾预测
  13. Pandas数据库数据抽取
  14. wps居中对齐不在中间_如何解决wps表格居中调整
  15. DDD之一年级小学生作业辅导
  16. 程序员直男也有的浪漫,快来给朋友制作一款定时微信推送服务吧
  17. 《dota2》地精修补匠tinker路人攻略
  18. linux 怎么看浏览器,Linux下浏览器比比看
  19. python--爬虫--积累--多图片网站抓取加速方案和调优记录
  20. 五千字长文为你揭秘滴滴共享出行派单算法原理(干货)

热门文章

  1. 树莓派4b连接单端口无线校园网及基本配置
  2. java设计模式 gof_Java设计模式GOF之工厂模式
  3. ##Windows 10纯净版下载##
  4. Winsock出错引起的断网
  5. 电脑开关坏了,用Reset键代替开关机键盘
  6. 基于Java+Swing+Mysql实现停车场管理系统
  7. Unity3D-VR《静夜诗》4-窗户门动画的播放
  8. java的抽象方法_java抽象方法是什么
  9. Docker玩腻了,不妨试试用Vagrant
  10. github 私有化部署_项目私有化部署