Python进阶第三方库之Matplotlib

应用Matplotlib的基本功能实现图形显示
应用Matplotlib实现多图显示
应用Matplotlib实现不同画图种类

1、什么是Matplotlib

是专门用于开发2D图表(包括3D图表)
以渐进、交互式方式实现数据可视化

2、为什么要学习Matplotlib

可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。
能将数据进行可视化,更直观的呈现
使数据更加客观、更具说服力
例如下面两个图为数字展示和图形展示:

3、实现一个简单的Matplotlib画图 **---**以折线图为例

3.1 matplotlib.pyplot模块

46matplotlib.pytplot包含了一系列类似于matlab的画图函数。
import matplotlib.pyplot as plt

3.2图形绘制流程:

1.创建画布 -- plt.figure()
plt.figure(figsize=(), dpi=)
figsize:指定图的长宽
dpi:图像的清晰度
返回fig对象
2.绘制图像 -- plt.plot(x, y)
以折线图为例
3.显示图像 -- plt.show()

3.3折线图绘制与显示

举例:展现上海一周的天气**,**比如从星期一到星期日的天气温度如下
import matplotlib.pyplot as plt

1.创建画布

plt.figure(figsize=(10, 10), dpi=100)

2.绘制折线图

plt.plot([1, 2, 3, 4, 5, 6 ,7], [17,17,18,15,11,11,13])

3.显示图像

plt.show()

**4、**基础绘图功能 **---**以折线图为例

准备数据并画出初始折线图

import matplotlib.pyplot as plt
import random

画出温度变化图

0.准备x, y坐标的数据

x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]

1.创建画布

plt.figure(figsize=(20, 8), dpi=80)

2.绘制折线图

plt.plot(x, y_shanghai)

3.显示图像

plt.show()
添加自定义x,y刻度
plt.xticks(x, **kwargs)
x:要显示的刻度值
plt.yticks(y, **kwargs)
y:要显示的刻度值

增加以下两行代码

构造x轴刻度标签

x_ticks_label = ["11点{}分".format(i) for i in x]

构造y轴刻度

y_ticks = range(40)

修改x,y轴坐标的刻度显示

plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
中文显示问题解决
解决方案一:
下载中文字体(黑体,看准系统版本)
步骤一:下载 SimHei 字体(或者其他的支持中文显示的字体也行)
步骤二:安装字体
linux下:拷贝字体到 usr/share/fonts 下:
sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf
windows和mac下:双击安装
步骤三:删除~/.matplotlib中的缓存文件
cd ~/.matplotlib
rm -r *
步骤四:修改配置文件matplotlibrc
vi ~/.matplotlib/matplotlibrc
将文件内容修改为:
font.family : sans-serif
font.sans-serif : SimHei
axes.unicode_minus : False
解决方案二:
在Python脚本中动态设置matplotlibrc,这样也可以避免由于更改配置文件而造成的麻烦,具体代码如下:
from pylab import mpl

设置显示中文字体

mpl.rcParams["font.sans-serif"] = ["SimHei"]
有时候,字体更改后,会导致坐标轴中的部分字符无法正常显示,此时需要更改axes.unicode_minus参数:

设置正常显示符号

mpl.rcParams["axes.unicode_minus"] = False
添加网格显示
为了更加清楚地观察图形对应的值
plt.grid(True, linestyle='--', alpha=0.5)
添加描述信息
添加x轴、y轴描述信息及标题
通过fontsize参数可以修改图像中字体的大小
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点0分到12点之间的温度变化图示", fontsize=20)
图像保存

保存图片到指定路径

plt.savefig("test.png")
注意:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。
完整代码:
import matplotlib.pyplot as plt
import random
from pylab import mpl

设置显示中文字体

mpl.rcParams["font.sans-serif"] = ["SimHei"]

设置正常显示符号

mpl.rcParams["axes.unicode_minus"] = False

0.准备数据

x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]

1.创建画布

plt.figure(figsize=(20, 8), dpi=100)

2.绘制图像

plt.plot(x, y_shanghai)

2.1 添加x,y轴刻度

构造x,y轴刻度标签

x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

刻度显示

plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

2.2 添加网格显示

plt.grid(True, linestyle="--", alpha=0.5)

2.3 添加描述信息

plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点--12点某城市温度变化图", fontsize=20)

2.4 图像保存

plt.savefig("./test.png")

3.图像显示

plt.show()

5、在一个坐标系中绘制多个图像

多次plot
需求:再添加一个城市的温度变化
收集到北京当天温度变化情况,温度在1度到3度。怎么去添加另一个在同一坐标系当中的不同图形,其实很简单只需要再次plot即可,但是需
要区分线条,如下显示。

增加北京的温度数据

y_beijing = [random.uniform(1, 3) for i in x]

绘制折线图

plt.plot(x, y_shanghai)

使用多次plot可以画多个折线

plt.plot(x, y_beijing, color='r', linestyle='--')
显示图例
注意:如果只在plt.plot()中设置label还不能最终显示出图例,还需要通过plt.legend()将图例显示出来。

绘制折线图

plt.plot(x, y_shanghai, label="上海")

使用多次plot可以画多个折线

plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")

显示图例

plt.legend(loc="best")
完整代码:

0.准备数据

x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]

1.创建画布

plt.figure(figsize=(20, 8), dpi=100)

2.绘制图像

plt.plot(x, y_shanghai, label="上海")
plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")

2.1 添加x,y轴刻度

构造x,y轴刻度标签

x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

刻度显示

plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

2.2 添加网格显示

plt.grid(True, linestyle="--", alpha=0.5)

2.3 添加描述信息

plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点--12点某城市温度变化图", fontsize=20)

2.4 图像保存

plt.savefig("./test.png")

2.5 添加图例

plt.legend(loc=0)

3.图像显示

plt.show()

相关推荐
m0_570466416 分钟前
代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
java·开发语言·算法
程序喵大人7 分钟前
分享个C++线程池的实现源码
开发语言·c++·线程池
和鲸社区12 分钟前
《斯坦福CS336》作业1开源,从0手搓大模型|代码复现+免环境配置
人工智能·python·深度学习·计算机视觉·语言模型·自然语言处理·nlp
不会吃萝卜的兔子31 分钟前
go webrtc - 1 go基本概念
开发语言·golang·webrtc
豌豆花下猫44 分钟前
Python 潮流周刊#118:Python 异步为何不够流行?(摘要)
后端·python·ai
THMAIL1 小时前
深度学习从入门到精通 - LSTM与GRU深度剖析:破解长序列记忆遗忘困境
人工智能·python·深度学习·算法·机器学习·逻辑回归·lstm
要做朋鱼燕1 小时前
【C++】 priority_queue 容器模拟实现解析
开发语言·c++·笔记·职场和发展
jiaway1 小时前
【C语言】第四课 指针与内存管理
c语言·开发语言·算法
励志不掉头发的内向程序员1 小时前
C++进阶——继承 (1)
开发语言·c++·学习
wheeldown1 小时前
【数学建模】数据预处理入门:从理论到动手操作
python·数学建模·matlab·python3.11