数据可视化 —— 折线图应用(大全)

一、导入需要的库

python 复制代码
# Matplotlib 是 Python 最常用的绘图库,pyplot 提供了类似 MATLAB 的绘图接口
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

二、常用的库函数

  • plt.plot(x轴,y轴):plot()是画折线图的函数。

  • plt.xlabel('日期'):x轴的显示标签。

  • plt.ylabel('气温(度)'):y轴的显示标签。

  • plt.xticks([原数据标签], [替换后的数据标签], rotation=300):用于x轴数据标签的显示,rotation是倾斜度。

  • plt.title('标题名', loc='left'):图上的名字显示,loc代表显示的位置在哪里。

  • plt.grid(which(网格类型)="major", axis(方向)='both', lw(线的宽度)=1):添加网格线。

  • plt.legend([图例名称, ..,]shadow(阴影) = True,fancybox(圆角矩形)=True): 显示图例。

  • **plt.savefig('名字.格式'):**保存图表为图片

  • **plt.show():**显示图表

  • plt.ylabel('名称'):设置y轴标签文本

三、案例一:一周气温图(基础版)

python 复制代码
import matplotlib.pyplot as plt
import numpy as np


x = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
# 定义 x 轴数据:包含星期一到星期日的字符串列表
# 用于表示横坐标的日期标签

high = [28, 28, 25, 18, 17, 20, 25]
# 最高气温数据列表(单位假设为摄氏度)
# 按周一到周日顺序排列

low = [22, 21, 18, 12, 14, 16, 19]
# 最低气温数据列表
# 与 high 列表顺序一致

plt.plot(x, high)
# 绘制最高气温折线图
# 第一个参数 x:横坐标数据
# 第二个参数 high:纵坐标数据
# 默认使用第一个颜色(蓝色)和线性连接

plt.plot(x, low)
# 绘制最低气温折线图
# 使用第二个默认颜色(橙色)叠加到同一坐标系

plt.show()
# 显示图形窗口
# 在脚本中必须调用的函数,用于渲染和显示所有已绘制的图形

四、案例二:分店折线图(中等)

准备好excel文件,拿第一分店的数据

python 复制代码
# 导入matplotlib的pyplot模块,用于绘图
import matplotlib.pyplot as plt
# 导入pandas模块,用于数据处理和分析
import pandas as pd

# 创建图形对象,设置图形参数
plt.figure(num='折线图', figsize=(6, 4), facecolor='w')  # num:图形名称, figsize:图形尺寸(宽6英寸,高4英寸), facecolor:画布背景色
# 设置全局字体为黑体(解决中文显示问题)
plt.rcParams['font.sans-serif'] = ['SimHei']

# 使用pandas读取Excel数据文件
df = pd.read_excel('2022年某店铺3个分店销售额.xlsx')

# 提取月份数据作为x轴
x = df['月份']
# 提取第一分店销售额数据作为y轴
y = df['第一分店']

# 设置x轴标签文本
plt.xlabel('月份')
# 设置y轴标签文本
plt.ylabel('销售额(万元)')
# 设置图表标题(指定宋体、字体大小12、黑色)
plt.title('2022年某店铺第一分店销售额', fontsize=12, color='k', fontproperties='SimSun')
# 设置y轴显示范围(最小值20,最大值30)
plt.ylim(20, 30)

# 添加水平参考线(显示全年平均值,使用虚线样式)
plt.axhline(y=sum(y)/12, linestyle=':')

# 启用网格线显示
plt.grid()

# 遍历每个数据点添加数值标签
for a, b in zip(x, y):
    # 在对应坐标位置显示数值,保留两位小数,水平居中对齐
    plt.text(a, b+0.2, '%.2f' % b, ha='center',va='bottom')

# 绘制折线图(青色虚线,方形标记,线宽2)
plt.plot(x, y, 'c:s', linewidth=2)

# 添加图例(包含平均销售额和分店数据说明,带阴影效果,圆角边框,定位在右下角)
plt.legend(('平均销售额','第一分店'), shadow=True, fancybox=True, loc=4)

# 再次绘制折线图(使用默认参数,可能覆盖前次样式)
plt.plot(x, y)

# 保存生成的图表为PNG图片文件
plt.savefig('2022年某店铺第一分店销售额.png')
# 在窗口中显示图表
plt.show()

五、案例三:正弦余弦图(中等)

python 复制代码
# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt

# 设置中文字体(适用于Windows)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示问题
plt.rcParams['axes.unicode_minus'] = False  

# 创建一个名为'正'的新图形窗口
plt.figure(num='正')

# 生成x轴数据:在-π到π之间生成256个等间距点(包含终点)
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)

# 计算正弦和余弦函数值
y1 = np.sin(x)
y2 = np.cos(x)

# 设置坐标轴标签
plt.xlabel('x轴')  # X轴标签
plt.ylabel('y轴')  # Y轴标签

# 设置x轴显示范围(扩展为原范围的1.5倍)
plt.xlim(x.min() * 1.5, x.max() * 1.5)

# 自定义x轴刻度标签(使用LaTeX符号表示π)
plt.xticks(
    [-4, -2, 0, 2, 4],  # 刻度位置(实际数值)
    [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$']  # 显示文本
)

# 添加标题(居中显示)
plt.title('正弦余弦图', loc='center')

# 绘制正弦曲线(红色虚线,线宽2)
plt.plot(x, y1, color='r', linestyle='--', linewidth=2)
# 绘制余弦曲线(黑色实线,线宽2)
plt.plot(x, y2, color='k', linestyle='-', linewidth=2)

# 添加带箭头的注释(xy指向点坐标,xytext文本位置)
plt.annotate(
    '最小值',
    xy=(-np.pi/2, -1.0),         # 箭头指向位置
    xytext=(-(np.pi/2), -0.5),   # 文本起始位置
    arrowprops=dict(arrowstyle='->')  # 箭头样式
)

# 添加网格线(主网格,双向,线宽1)
plt.grid(
    which="major",  # 显示主网格
    axis='both',    # 同时显示x/y轴网格
    lw=1            # 网格线宽
)

# 添加水平参考线(在y=0处,从xmin=0到xmax=0.5)
plt.axhline(
    y=0, 
    xmin=0, 
    xmax=0.5, 
    linestyle='-', 
    color='r'
)
# 添加垂直参考线(在x=0处)
plt.axvline(
    x=0, 
    linestyle='-', 
    color='r'
)

# 添加垂直参考区域(x在0.5到2.0之间,透明度0.9)
plt.axvspan(
    xmin=0.5,
    xmax=2.0,
    alpha=0.9
)
# 添加水平参考区域(y在0.5到1.0之间,透明度0.3)
plt.axhspan(
    ymin=0.5,
    ymax=1.0,
    alpha=0.3
)

# 添加图例(元组指定条目,loc=1为右上角,带阴影和圆角边框)
plt.legend(
    ('正弦函数', '余弦函数'), 
    loc=1, 
    shadow=True, 
    fancybox=True
)

# 显示图形
plt.show()

六、案例四:销售额折线图(进阶版)

python 复制代码
# 导入 matplotlib 库的 pyplot 模块,用于绘图
import matplotlib.pyplot as plt
# 导入 pandas 库,用于数据处理和读取 Excel 文件
import pandas as pd

# 创建一个新的图形窗口,设置窗口标题为 '多柱形图',图形大小为 9x6 英寸,背景颜色为白色
plt.figure(num='折线图', figsize=(9, 6), facecolor='w')

# 设置 matplotlib 使用的字体为楷体,以正确显示中文
plt.rcParams['font.sans-serif'] = 'KaiTi'
# 解决负号显示为方块的问题,使负号能正常显示
plt.rcParams['axes.unicode_minus'] = False

# 使用 pandas 的 read_excel 函数读取 Excel 文件 '不同产品各季度的销售额.xlsx',并将数据存储在 DataFrame 对象 df 中
df = pd.read_excel('不同产品各季度的销售额.xlsx')

# 从 DataFrame 中提取 '季度' 列的数据,作为 x 轴的数据
x = df['季度']
# 从 DataFrame 中提取 '产品A' 列的数据,作为产品 A 的销售额数据
y1 = df['产品A']
# 从 DataFrame 中提取 '产品B' 列的数据,作为产品 B 的销售额数据
y2 = df['产品B']
# 从 DataFrame 中提取 '产品C' 列的数据,作为产品 C 的销售额数据
y3 = df['产品C']

# 设置图表的标题为 '不同产品各季度的销售额',字体大小为 20
plt.title('不同产品各季度的销售额', fontsize=20)

# 设置 y 轴的标签为 '销售额(元)'
plt.ylabel('销售额(元)', fontsize=16)

# 设置 y 轴的取值范围为 0 到 10000
plt.ylim(0, 10000)

# 在图表中添加网格线,方便观察数据
plt.grid()

# 遍历产品 A 的每个数据点,在数据点上方 500 个单位处添加销售额的文本标签
for a, b in zip(x, y1):
    # 在坐标 (a, b+500) 处添加文本,文本内容为 b 的整数值,水平居中对齐
    plt.text(a, b + 500, '%d' % b, ha='center')

# 绘制产品 A 的折线图,x 轴为季度数据,y 轴为产品 A 的销售额数据,线条颜色为红色,样式为虚线,数据点用圆形标记
plt.plot(x, y1, 'r:o')

# 遍历产品 B 的每个数据点,在数据点上方 500 个单位处添加销售额的文本标签
for a, b in zip(x, y2):
    # 在坐标 (a, b+500) 处添加文本,文本内容为 b 的整数值,水平居中对齐
    plt.text(a, b + 500, '%d' % b, ha='center')

# 绘制产品 B 的折线图,x 轴为季度数据,y 轴为产品 B 的销售额数据,线条颜色为黄色,样式为点划线,数据点用菱形标记
plt.plot(x, y2, 'y-.D')

# 遍历产品 C 的每个数据点,在数据点上方 200 个单位处添加销售额的文本标签
for a, b in zip(x, y3):
    # 在坐标 (a, b+200) 处添加文本,文本内容为 b 的整数值,水平居中对齐
    plt.text(a, b + 200, '%d' % b, ha='center')

# 绘制产品 C 的折线图,x 轴为季度数据,y 轴为产品 C 的销售额数据,线条颜色为蓝色,样式为双虚线,数据点用特定样式标记
plt.plot(x, y3, 'b--4')

# 添加图例,图例标签分别为 '产品A'、'产品B'、'产品C',添加阴影效果和圆角边框
plt.legend(['产品A', '产品B', '产品C'], shadow=True, fancybox=True)

# 显示绘制好的图表
plt.show()

七、案例五:不同行业的平均工资(进阶版)

python 复制代码
# 导入 matplotlib 库中的 pyplot 模块,该模块提供了类似于 MATLAB 的绘图接口,用于创建各种图表
import matplotlib.pyplot as plt
# 导入 pandas 库,它是一个强大的数据处理和分析工具,常用于读取和处理结构化数据
import pandas as pd

# 创建一个新的图形窗口,设置窗口标题为 '2021年各行业城镇单位就业人员年平均工资'
# 图形的大小为 12 英寸宽,9 英寸高,背景颜色设置为白色
plt.figure(num='2021年各行业城镇单位就业人员年平均工资', figsize=(12, 9), facecolor='w')

# 设置 matplotlib 的字体为黑体,这样可以正确显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']

# 使用 pandas 的 read_excel 函数读取 Excel 文件 '不同行业城镇单位就业人员年平均工资.xlsx'
# 并将文件中的数据存储在 DataFrame 对象 df 中
df = pd.read_excel('不同行业城镇单位就业人员年平均工资.xlsx')

# 从 DataFrame 对象 df 中提取 '行业' 列的数据,存储在变量 hy 中
hy = df['行业']
# 从 DataFrame 对象 df 中提取 '2021年' 列的数据,存储在变量 yuan 中
yuan = df['2021年']

# 为图表设置标题,标题内容为 '2021年各行业城镇单位就业人员年平均工资'
# loc='center' 表示标题居中显示
plt.title('2021年各行业城镇单位就业人员年平均工资', loc='center')

# 取消 x 轴标签的设置,注释掉的代码原本是打算设置 x 轴标签为 "行业"
# plt.xlabel("行业")

# 设置 y 轴的标签为 "单位(元)"
plt.ylabel("单位(元)")

# 在图表中添加网格线,方便查看数据点的位置和数值
plt.grid()

# 绘制一条水平参考线,y 的位置为所有行业 2021 年平均工资的平均值
# 这里假设数据有 19 个行业,linestyle=':' 表示参考线的样式为虚线
plt.axhline(y=sum(yuan)/19, linestyle=':')

# 设置 x 轴刻度标签的属性
# rotation=290 表示将刻度标签逆时针旋转 290 度,近似垂直显示
# fontsize=10 表示将刻度标签的字体大小设置为 10
# 注释掉的 va='center' 原本是想让标签垂直居中
plt.xticks(
    rotation=290,
    fontsize=10,
    # va='center'
)

# 调整子图的布局,增加底部的边距为 0.25,防止 x 轴标签与图表底部重叠
plt.subplots_adjust(bottom=0.25)

# 使用 zip 函数将行业名称和对应的 2021 年平均工资组合成元组
# 遍历这些元组,在每个数据点的位置添加文本标签
for a, b in zip(hy, yuan):
    # 在坐标 (a, b) 处添加文本标签,标签内容为该行业 2021 年平均工资,格式为 'X 元'
    # ha='right' 表示文本水平右对齐,va='bottom' 表示文本垂直底部对齐
    plt.text(a, b, '%d元' % b, ha='right', va='bottom')

# 绘制折线图,x 轴为行业名称,y 轴为 2021 年各行业平均工资
# 'r-D' 表示线条颜色为红色,样式为虚线,数据点用菱形标记
plt.plot(hy, yuan, 'r-D')

# 为图表添加图例,图例中显示 '平均值参考线' 和 '各行业的评价工资'(这里可能存在拼写错误,应为 '各行业的平均工资')
# loc=1 表示图例显示在右上角,shadow=True 为图例添加阴影效果,fancybox=True 为图例添加圆角边框
plt.legend(('平均值参考线', '各行业的评价工资'), loc=1, shadow=True, fancybox=True)

# 将绘制好的图表保存为名为 '2021年各行业城镇单位就业人员年平均工资.png' 的图片文件
plt.savefig('2021年各行业城镇单位就业人员年平均工资.png')

# 显示绘制好的图表
plt.show()
相关推荐
Lounger664 分钟前
107.二叉树的层序遍历II- 力扣(LeetCode)
python·算法·leetcode
Code_流苏5 分钟前
《Python星球日记》第25天:Pandas 数据分析
python·数据分析·pandas·数据聚合·时间序列
程序员三藏11 分钟前
Selenium三大等待
自动化测试·软件测试·数据库·python·selenium·测试工具·测试用例
明月看潮生36 分钟前
青少年编程与数学 02-016 Python数据结构与算法 14课题、动态规划
python·算法·青少年编程·动态规划·编程与数学
明月看潮生37 分钟前
青少年编程与数学 02-016 Python数据结构与算法 11课题、分治
python·算法·青少年编程·编程与数学
杂学者43 分钟前
python办公自动化---pdf文件的读取、添加水印
python
小学生搞程序1 小时前
学习Python的优势体现在哪些方面?
开发语言·python·学习
_玖-幽1 小时前
Python 数据分析01 环境搭建教程
大数据·python·jupyter
databook1 小时前
『Plotly实战指南』--面积图绘制与应用
python·数据分析·数据可视化
carpell1 小时前
【双指针法】:这么常用的你怎么能不知道
python·链表·字符串·数组·双指针法