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

news2025/4/18 18:51:30

一、导入需要的库

# 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轴标签文本

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

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文件,拿第一分店的数据

# 导入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()

 

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

# 导入必要的库
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()

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

# 导入 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()

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


# 导入 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()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2332256.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是中性线、零线、地线,三相四线制如何入户用电

在变压器三相电侧,按照星形连接法,有一个中心点,这根线引出来的线接不接地:不接地就是中性线,接地就是零线 下面就是没有接地:中性线 接地了以后就可以叫做零线了 三相电在高压输电的时候是没有零线的&a…

【含文档+PPT+源码】基于Android家政服务系统的开发与实现

介绍视频: 课程简介: 本课程演示的是一款基于Android家政服务系统的开发与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.…

配置mac mini M4 的一些软件

最近更换了 mac mini M4 ,想要重新下载配置软件 ,记录一下。 Homebrew是什么? homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等功能。通过简单的指令可以实现包管理,而不用关心各种…

Java——抽象方法抽象类 接口 详解及综合案例

1.抽象方法抽象类 介绍 抽象方法: 将共性的行为(方法)抽取到父类之后, 由于每一个子类执行的内容是不一样, 所以,在父类中不能确定具体的方法体。 该方法就可以定义为抽象方法。 抽象类: 如果一个类中存在抽象方法,那么该类就必须…

【计网】一二章习题

1. (单选题, 3 分) 假设主机A和B之间的链路带宽为100Mbps,主机A的网卡速率为1Gbps,主机B的网卡速率为10Mbps,主机A给主机B发送数据的最高理论速率为( )。 A. 100Mbps B. 1Gbps C. 1Mbps D. 10Mbps 正确答案 D 发…

【软考-高级】【信息系统项目管理师】【论文基础】进度管理过程输入输出及工具技术的使用方法

定义 项目进度管理是为了保证项目按时完成,对项目中所需的各个过程进行管理的过程,包括规划进度、定义活动、活动优先级排序、活动持续时间、制定进度计划和控制进度。 管理基础 制定进度计划的一般步骤 选择进度计划方法(如关键路径法&a…

TOGAF之架构标准规范-技术架构

TOGAF是工业级的企业架构标准规范,本文主要描述技术架构阶段。 如上所示,技术架构(Technology Architecture)在TOGAF标准规范中处于D阶段 技术架构阶段 技术架构阶段的主要内容包括阶段目标、阶段输入、流程步骤、阶段输出、架构…

Ansys Electronics 变压器 ACT

你好, 在本博客中,我将讨论如何使用 Ansys 电子变压器 ACT 自动快速地设计电力电子电感器或变压器。我将逐步介绍设计和创建电力电子变压器示例的步骤,该变压器为同心组件,双绕组,采用正弦电压激励,并应用…

十三种物联网/通信模块综合对比——《数据手册--物联网/通信模块》

物联网/通信模块 名称 功能 应用场景 USB转换模块 用于将USB接口转换为其他类型的接口,如串口、并口等,实现不同设备之间的通信。 常用于计算机与外部设备(如打印机、扫描仪等)的连接,以及数据传输和设…

Redis安装(Windows环境)

文章目录 Resid简介:下载Redis启动Redis服务设置Windows服务常用的Redis服务命令 Resid简介: Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。 Redis通常…

FreeRTOS项目工程完善指南:STM32F103C8T6系列

FreeRTOS项目工程完善指南:STM32系列 本文是FreeRTOS STM32开发系列教程的一部分。我们将完善之前移植的FreeRTOS工程,添加串口功能并优化配置文件。 更多优质资源,请访问我的GitHub仓库:https://github.com/Despacito0o/FreeRTO…

论坛系统(测试报告)

文章目录 一、项目介绍二、设计测试用例三、自动化测试用例的部分展示用户名或密码错误登录成功编辑自己的帖子成功修改个人信息成功回复帖子信息成功 四、性能测试总结 一、项目介绍 本平台是用Java开发,基于SpringBoot、SpringMVC、MyBatis框架搭建的小型论坛系统…

【汽车产品开发项目管理——端到端的汽车产品诞生流程】

MPU:集成运算器、寄存器和控制器的中央处理器芯片 MCU:微控制单元,将中央处理器CPU、存储器ROM/RAM、计数器、IO接口及多种外设模块集成在单一芯片上的微型计算机系统。 汽车产品开发项目属性:临时性、独特性、渐进明细性、以目标…

从零到有的游戏开发(visual studio 2022 + easyx.h)

引言 本文章适用于C语言初学者掌握基本的游戏开发, 我将用详细的步骤引领大家如何开发属于自己的游戏。 作者温馨提示:不要认为开发游戏很难,一些基本的游戏逻辑其实很简单, 关于游戏的开发环境也不用担心,我会详细…

【C++初阶】--- vector容器功能模拟实现

1.什么是vector? 在 C 里,std::vector 是标准模板库(STL)提供的一个非常实用的容器类,它可以看作是动态数组 2.成员变量 iterator _start;:指向 vector 中第一个元素的指针。 iterator _finish;&#x…

Elasticsearch 学习规划

Elasticsearch 学习规划 明确学习目标与动机 场景化需求分析 - **S**:掌握Elasticsearch架构体系,熟练使用Elasticsearch 进行数据分析,Elasticsearch结合java 项目落地案例 - **M**:搜索和Elasticsearch相关GitHub项目 - **A**:每…

LVM 扩容详解

目录 一、LVM扩容 1. 查看磁盘分区情况: 2. 查看pv、vg、lv 情况 3. 将新硬盘分区初始化 4. 将初始化后的分区添加到VG中 5. 查看逻辑卷的设备路径 6. VG分配给lv 二、扩展文件系统 1.确认文件系统类型 三、检验 一、LVM扩容 1. 查看磁盘分区情况: …

STM32 低功耗模式下 RTC唤醒 和 PA0唤醒 的配合使用

STM32 低功耗模式不同唤醒源的配合使用 by 矜辰所致前言 关于 STM32 如何实现低功耗模式,我之前写过一篇文章: STM32 使用 STM32CubeMX HAL库实现低功耗模式 各种休眠模式如何实现文中已经讲得很清楚了,但是作为教学文章,文…

QML 弹窗控件:Popup的基本用法与样式

目录 引言相关阅读Popup基本属性工程结构示例实现Main.qml - 主界面SimplePopup.qml - 简单弹窗ModalPopup.qml - 模态弹窗CustomPopup.qml - 自定义样式弹窗AnimatedPopup.qml - 带动画的弹窗 总结工程下载 引言 在现代图形用户界面(GUI)开发中,弹窗(Popup)是一种…

NSS#Round30 Web

小桃的PHP挑战 <?php include jeer.php; highlight_file(__FILE__); error_reporting(0); $A 0; $B 0; $C 0;//第一关 if (isset($_GET[one])){$str $_GET[str] ?? 0;$add substr($str, 0, 1); $add;if (strlen($add) > 1 ) {$A 1;} else {echo $one; } } else…