数据分析基础之《matplotlib(2)—折线图》

本文详细介绍了如何使用matplotlib库在Python中绘制折线图,包括基本的折线图绘制、设置画布属性、自定义刻度和标签、中文显示、添加图例、多个坐标系显示以及应用示例,如公司活跃用户和数学函数图像的绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、折线图绘制与保存图片

1、matplotlib.pyplot模块
matplotlib.pyplot包含了一系列类似于matlab的画图函数。它的函数作用于当前图形(figure)的当前坐标系(axes)

import matplotlib.pyplot as plt

2、折线图绘制与显示
展示城市一周的天气,比如从星期一到星期日的天气温度如下

# 1)创建画布(容器层)
plt.figure()
# 2)绘制折线图(图像层)
plt.plot([1,2,3,4,5,6,7], [17,17,18,15,11,11,13])
# 3)显示图像
plt.show()

3、设置画布属性与图片保存
plt.figure(figsize=(), dpi=)
figsize:指定的长宽
dpi:图像的清晰度,dot per inch 每英寸有多少个点
返回fig对象
plt.savefig(path)

# 1)创建画布(容器层)
plt.figure(figsize=(20,8), dpi=100)
# 2)绘制折线图(图像层)
plt.plot([1,2,3,4,5,6,7], [17,17,18,15,11,11,13])
# 保存图像
plt.savefig("/root/test78.png")
# 3)显示图像
plt.show()

注:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片

二、完善原始折线图1(辅助显示层)

1、案例:画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度~18度

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

# 案例:画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度~18度

import random

# 1、准备数据 x y
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]

# 2、创建画布
plt.figure(figsize=(20,8), dpi=100)

# 3、绘制图像
plt.plot(x, y_shanghai)

# 4、显示图像
plt.show()

3、添加自定义x、y刻度
修改刻度

(1)plt.xticks(x, [labels], **kwargs)
说明:
x:要显示的刻度值
[labels]:数组类型,用于设置每个间隔的显示标签
**kwargs:用于设置标签字体倾斜度和颜色等外观属性

(2)plt.yticks(y, **kwargs)
说明:
y:要显示的刻度值
**kwargs:刻度值显示的说明

import random

# 1、准备数据 x y
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]

# 2、创建画布
plt.figure(figsize=(20,8), dpi=100)

# 3、绘制图像
plt.plot(x, y_shanghai)

# 修改x、y刻度
# 准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5], x_label[::5])
plt.yticks(range(0, 40, 5))

# 4、显示图像
plt.show()

4、中文显示问题解决

(1)安装依赖包
yum install fontconfig mkfontscale

(2)从windows系统复制一个微软雅黑
C:\Windows\Fonts\msyh.ttc

(3)将msyh.ttc上传到
/usr/share/fonts/

(3)刷新缓存
mkfontscale && mkfontdir && fc-cache

(4)找到配置文件位置

import matplotlib
matplotlib.matplotlib_fname()

显示
/usr/local/lib64/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc

(6)编辑文件matplotlibrc
找到font.family,去掉注释
找到font.sans-serif,去掉注释,并加上Microsoft YaHei

(7)删除缓存
cd ~/.cache/matplotlib/
rm -r *

(8)代码

import random

# 设置字体
plt.rcParams["font.sans-serif"]=["Microsoft YaHei"]
# 该语句解决图像中的“-”负号的乱码问题
plt.rcParams["axes.unicode_minus"]=False

# 1、准备数据 x y
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]

# 2、创建画布
plt.figure(figsize=(20,8), dpi=100)

# 3、绘制图像
plt.plot(x, y_shanghai)

# 修改x、y刻度
# 准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5], x_label[::5])
plt.yticks(range(0, 40, 5))

# 4、显示图像
plt.show()

5、添加网络显示
plt.grid(b, linestyle='', alpha=)
说明:
b:布尔值,是否显示网格
linestyle:线条风格
alpha:透明度

import random

# 设置字体
plt.rcParams["font.sans-serif"]=["Microsoft YaHei"]
# 该语句解决图像中的“-”负号的乱码问题
plt.rcParams["axes.unicode_minus"]=False

# 1、准备数据 x y
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]

# 2、创建画布
plt.figure(figsize=(20,8), dpi=100)

# 3、绘制图像
plt.plot(x, y_shanghai)

# 修改x、y刻度
# 准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5], x_label[::5])
plt.yticks(range(0, 40, 5))

# 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)

# 4、显示图像
plt.show()

6、添加描述信息
添加x轴、y轴,描述信息及标题

import random

# 设置字体
plt.rcParams["font.sans-serif"]=["Microsoft YaHei"]
# 该语句解决图像中的“-”负号的乱码问题
plt.rcParams["axes.unicode_minus"]=False

# 1、准备数据 x y
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]

# 2、创建画布
plt.figure(figsize=(20,8), dpi=100)

# 3、绘制图像
plt.plot(x, y_shanghai)

# 修改x、y刻度
# 准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5], x_label[::5])
plt.yticks(range(0, 40, 5))

# 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)

# 添加描述信息
plt.xlabel("时间变化")
plt.ylabel("温度变化")
plt.title("某城市11点到12点每分钟的温度变化状况")

# 4、显示图像
plt.show()

三、完善原始折线图2(图像层)

1、多次plot

需求:再添加一个城市的温度变化
收集到北京当天温度变化情况,温度在1度到3度

import random

# 设置字体
plt.rcParams["font.sans-serif"]=["Microsoft YaHei"]
# 该语句解决图像中的“-”负号的乱码问题
plt.rcParams["axes.unicode_minus"]=False

# 1、准备数据 x y
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
# 准备北京的数据
y_beijing = [random.uniform(1, 3) for i in x]

# 2、创建画布
plt.figure(figsize=(20,8), dpi=100)

# 3、绘制图像
plt.plot(x, y_shanghai, color="red", linestyle="--")
plt.plot(x, y_beijing, color="blue")

# 修改x、y刻度
# 准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5], x_label[::5])
plt.yticks(range(0, 40, 5))

# 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)

# 添加描述信息
plt.xlabel("时间变化")
plt.ylabel("温度变化")
plt.title("上海、北京11点到12点每分钟的温度变化状况")

# 4、显示图像
plt.show()

2、设置图形风格
color颜色字符
r:红色
g:绿色
b:蓝色
w:白色
c:青色
m:洋红
y:黄色
k:黑色

linestyle风格字符
-:实线
--:虚线
-.:点划线
::点虚线
'':留空、空格
(效果见下一个)

3、显示图例
需要添加label标签,需要改图像层、辅助显示层
plt.legend(loc="best")

图例位置:
best:0
upper right:1
upper left:2
lower left:3
lower right:4
right:5

import random

# 设置字体
plt.rcParams["font.sans-serif"]=["Microsoft YaHei"]
# 该语句解决图像中的“-”负号的乱码问题
plt.rcParams["axes.unicode_minus"]=False

# 1、准备数据 x y
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
# 准备北京的数据
y_beijing = [random.uniform(1, 3) for i in x]

# 2、创建画布
plt.figure(figsize=(20,8), dpi=100)

# 3、绘制图像
plt.plot(x, y_shanghai, color="red", linestyle="--", label="上海")
plt.plot(x, y_beijing, color="blue", label="北京")

# 显示图例
plt.legend(loc="best")

# 修改x、y刻度
# 准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5], x_label[::5])
plt.yticks(range(0, 40, 5))

# 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)

# 添加描述信息
plt.xlabel("时间变化")
plt.ylabel("温度变化")
plt.title("上海、北京11点到12点每分钟的温度变化状况")

# 4、显示图像
plt.show()

四、多个坐标系显示-plt.subplots(面向对象的画图方法)

1、如果我们想要将上海和北京的天气图显示在同一个图的不同坐标系中
可以通过subplots函数来实现,创建一个带有多个axes(坐标系/绘图区)的图
matplotlib.pyplot.subplots(nrow=1, ncols=1, **fig_kw)
参数:
nrows:行的数
ncols:列的数
**fig_kw:其他参数

返回值:
fig:图对象
ax:绘图区对象
设置标题等方法不同,使用面向对象的方法
  set_xticks
  set_yticks
  set_xlabel
  set_ylabel

注意:plt.函数名()相当于面向过程的画图方法,ax.set_方法名()相当于面向对象的画图方法

import random

# 设置字体
plt.rcParams["font.sans-serif"]=["Microsoft YaHei"]
# 该语句解决图像中的“-”负号的乱码问题
plt.rcParams["axes.unicode_minus"]=False

# 1、准备数据 x y
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
# 准备北京的数据
y_beijing = [random.uniform(1, 3) for i in x]

# 2、创建画布
#plt.figure(figsize=(20,8), dpi=100)
figure, axes = plt.subplots(nrows=1, ncols=2, figsize=(20,8), dpi=100)

# 3、绘制图像
axes[0].plot(x, y_shanghai, color="red", linestyle="--", label="上海")
axes[1].plot(x, y_beijing, color="blue", label="北京")

# 显示图例
axes[0].legend(loc="best")
axes[1].legend(loc="best")

# 修改x、y刻度
# 准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
axes[0].set_xticks(x[::5])
axes[0].set_xticklabels(x_label[::5])
axes[0].set_yticks(range(0, 40, 5))
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(x_label[::5])
axes[1].set_yticks(range(0, 40, 5))

# 添加网格显示
axes[0].grid(True, linestyle='--', alpha=0.5)
axes[1].grid(True, linestyle='--', alpha=0.5)

# 添加描述信息
axes[0].set_xlabel("时间变化")
axes[0].set_ylabel("温度变化")
axes[0].set_title("上海11点到12点每分钟的温度变化状况")
axes[1].set_xlabel("时间变化")
axes[1].set_ylabel("温度变化")
axes[1].set_title("北京11点到12点每分钟的温度变化状况")

# 4、显示图像
plt.show()

五、折线图的应用场景

1、呈现公司产品(不同区域)每天活跃用户数

2、呈现app每天下载数量

3、呈现产品新功能上线后,用户点击次数随时间的变化

4、共同点:某事物、某指标随时间的变化状况

5、拓展:画各种数学函数图像(x和x之间非常的密集)
注意:plt.plot()除了可以画折线图,也可以用于画各种数学函数图像

# 绘制数学函数图像
# 绘制抛物线

import numpy as np
# 1、准备x、y
# 在-1和1之间等距离生成1000个数
x = np.linspace(-1, 1, 1000)
y = -2 * x * x

# 2、创建画布
plt.figure(figsize=(20,8), dpi=100)

# 3、绘制图像
plt.plot(x, y)

# 添加网格显示
plt.grid(linestyle="--", alpha=0.5)

# 4、显示图像
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值