Python读取csv、Excel文件生成图表
简介
本文章介绍了通过读取 csv 或 Excel 文件内容,将其转换为折线图或柱状图的方法,并写入 html 文件中。
目录
1. 读取CSV文件
1.1. 生成折线图
1.1.1. 简单生成图表
1.1.2. 设置折线图格式
1.2. 生成柱状图
1.2.1. 简单生成图表
1.2.2. 设置柱状图格式
2. 读取Excel文件
2.1. 生成折线图
2.1.1. 简单生成图表
2.1.2. 设置折线图格式
2.2. 生成柱状图
2.2.1. 简单生成图表
2.2.2. 设置柱状图格式
3. 将生成的折线图写入html文件
3.1. 直接写入图片
3.2. 添加文字描述
1. 读取CSV文件
1.1. 生成折线图
1.1.1. 简单生成图表
代码如下
import pandas
import matplotlib.pyplot as plt# 设置csv文件路径
file = r'E:\test.csv'# 防止中文乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 通过pandas读取文件内容
df = pandas.read_csv(file)
# 将文件第一行设置为序列名称
series_names = df .columns# 将文件数据绘制为折线图
plt.plot(df)
plt.legend(series_names) #设置序列名称
plt.xlabel('横轴标题') #设置横坐标名称
plt.ylabel('纵轴标题') #设置纵坐标名称
plt.title('图表标题') #设置图表标题# 将绘制的图表显示在屏幕上
plt.show()# 保存图表为png文件
# plt.savefig('filename.png')
绘制结果如下(csv文件中含有3列数据)

1.1.2. 设置折线图格式
代码如下(在1.1.1目录的代码基础上增加了:图片长宽、标记样式、网格线、横纵轴参考线)
import pandas
import matplotlib.pyplot as plt# 设置csv文件路径
file = r'E:\test.csv'# 防止中文乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 通过pandas读取文件内容
df = pandas.read_csv(file)
# 将文件第一行设置为序列名称
series_names = df .columns# 定义图表大小(长15,高8),必须放在plt.plot前面
plt.figure(figsize=(15,8))# 将文件数据绘制为折线图
plt.plot(df, marker='o', markersize=3) #marker设置标记样式和大小
plt.xlabel('横轴标题') #设置横坐标名称
plt.ylabel('纵轴标题') #设置纵坐标名称
plt.title('图表标题') #设置图表标题
plt.grid() #显示网格线
plt.legend(series_names) #设置序列名称
plt.axhline(y=2, color='r', linestyle='--') #在y轴上添加横向参考线。
plt.axvline(x=1, color='r', linestyle='--') #在x轴上添加纵向参考线。# 将绘制的图表显示在屏幕上
plt.show()# 保存图表为png文件
# plt.savefig('filename.png')
绘制结果如下

1.2. 生成柱状图
1.2.1. 简单生成图表
代码如下
import pandas as pd
import matplotlib.pyplot as plt# 从CSV文件读取数据并指定第一行为列名
data = pd.read_csv(r'E:\test.csv', header=0)# 防止中文乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 获取列名和对应的值
columns = data.columns
values = data.iloc[0].values# 绘制柱状图
plt.bar(columns, values)
plt.xlabel('横轴标题')
plt.ylabel('纵轴标题')
plt.title('图表标题')# 将绘制的图表显示在屏幕上
plt.show()# 保存图表为png文件
# plt.savefig('filename.png')
绘制结果如下

1.2.2. 设置柱状图格式
颜色代码
'b' 表示蓝色
'g' 表示绿色
'r' 表示红色
'c' 表示青色
'm' 表示品红色
'y' 表示黄色
'k' 表示黑色
'w' 表示白色。
代码如下(在1.2.1目录的代码基础上增加了:图片长宽、柱子宽度/颜色、边框宽度/颜色)
import pandas as pd
import matplotlib.pyplot as plt# 从CSV文件读取数据并指定第一行为列名
data = pd.read_csv(r'E:\test.csv', header=0)# 防止中文乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 定义图表大小(长15,高8),必须放在plt.plot前面
plt.figure(figsize=(15,8))# 获取列名和对应的值
columns = data.columns
values = data.iloc[0].values# 绘制柱状图
plt.bar(columns, values, #横轴坐标color='y', #设置柱子颜色(黄色,见颜色代码)width = 0.8, #设置柱子宽度edgecolor='k', #设置柱子边框颜色(黑色,见颜色代码)linewidth=2 #设置柱子边框宽度
)
plt.xlabel('横轴标题')
plt.ylabel('纵轴标题')
plt.title('图表标题')# 将绘制的图表显示在屏幕上
plt.show()# 保存图表为png文件
# plt.savefig('filename.png')
绘制结果如下

2. 读取Excel文件
2.1. 生成折线图
2.1.1. 简单生成图表
代码如下
import pandas
import matplotlib.pyplot as plt# 防止乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 读取Excel文件内容
df = pandas.read_excel(r'E:\test.xlsx', sheet_name='Sheet1')
column_names = df.columns.tolist() #获取第1行名称
excel_rows = df.shape[0] #获取行数# 设置横轴数据,可以在Excel中获取,这里直接将行数从1开始遍历到末尾
x = [i for i in range(1, excel_rows+1)]
# 遍历第一行的列名
for col_name in column_names:# 通过列名提取画图的数据y = df[col_name].to_numpy()# 画图,执行横轴坐标,将线条图例名设置为第一行的列名plt.plot(x, y, label=col_name)# 设置属性
plt.legend() # 显示图例标题
plt.xlabel('横坐标名称')
plt.ylabel('纵坐标名称')
plt.title('折线图标题')# plt.savefig('./filename.jpg') # 保存图片
plt.show() # 查看图片
绘制结果如下

2.1.2. 设置折线图格式
代码如下(在2.1.1目录的代码基础上增加了:图片长宽、标记样式、网格线、横纵轴参考线)
import pandas
import matplotlib.pyplot as plt# 防止乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 读取Excel文件内容,如果读取csv文件,则使用pandas.read_csv
df = pandas.read_excel(r'E:\test.xlsx', sheet_name='Sheet1')
column_names = df.columns.tolist() #读取第1行名称
excel_rows = df.shape[0] #读取行数# 定义图表大小(长15,高8),必须放在plt.plot前面
plt.figure(figsize=(15,8))# 设置横轴数据,可以在Excel中获取,这里直接将行数从1开始遍历到末尾
x = [i for i in range(1, excel_rows+1)]
# 遍历第一行的列名
for col_name in column_names:# 通过列名提取画图的数据y = df[col_name].to_numpy()# 画图,执行横轴坐标,将线条图例名设置为第一行的列名plt.plot(x, y, label=col_name, marker='o', markersize=3) #marker设置标记样式和大小# 设置属性
plt.legend() # 显示图例标题
plt.xlabel('横坐标名称')
plt.ylabel('纵坐标名称')
plt.title('折线图标题')
plt.grid() #显示网格线
plt.axhline(y=2, color='r', linestyle='--') #在y轴上添加横向参考线
plt.axvline(x=1, color='r', linestyle='--') #在x轴上添加纵向参考线# plt.savefig('./aa.jpg') # 保存图片
plt.show() # 查看图片
绘制结果如下

2.2. 生成柱状图
2.2.1. 简单生成图表
代码如下(单行数据)
import pandas
import matplotlib.pyplot as plt# 防止乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 读取Excel文件内容
df = pandas.read_excel(r'E:\test.xlsx', sheet_name='Sheet1')# 获取第一行的名称
column_names = df.columns.tolist()# 去除第一行,并转置数据
data = df.T# 创建柱状图,指定绘制的类型为柱状图(line:折线图(默认),bar:柱状图,barh:水平柱状图,hist:直方图,box:箱线图,kde:核密度估计图,density:密度图,area:面积图,scatter:散点图,hexbin:Hexbin 图(用于显示二维数据的分布情况))
data.plot(kind='bar')# 设置柱子的名称(rotation旋转柱子标题的度数)
plt.xticks(range(len(column_names)), column_names, rotation=0)# 添加标题和坐标轴标签
plt.title('图表标题')
plt.xlabel('横轴标题')
plt.ylabel('纵轴标题')# 显示柱状图
plt.show()
绘制结果如下

多行数据需要增加修改图例名称的方法,默认从0开始,设置为从1开始。每个图例表示行数,比例1:第一行;2:第二行...
import pandas
import matplotlib.pyplot as plt# 防止乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 读取Excel文件内容
df = pandas.read_excel(r'E:\test.xlsx', sheet_name='Sheet2')# 获取第一行的名称
column_names = df.columns.tolist()# 去除第一行,并转置数据
data = df.T# 创建柱状图,指定绘制的类型为柱状图(line:折线图(默认),bar:柱状图,barh:水平柱状图,hist:直方图,box:箱线图,kde:核密度估计图,density:密度图,area:面积图,scatter:散点图,hexbin:Hexbin 图(用于显示二维数据的分布情况))
data.plot(kind='bar')# 设置柱子的名称(rotation旋转柱子标题的度数)
plt.xticks(range(len(column_names)), column_names, rotation=0)# 添加标题和坐标轴标签
plt.title('图表标题')
plt.xlabel('横轴标题')
plt.ylabel('纵轴标题')# 修改图例名称(从1开始,1表示第1行数据...)
handles, labels = plt.gca().get_legend_handles_labels()
labels = [int(label)+1 for label in labels]
plt.legend(handles, labels)# 显示柱状图
plt.show()

2.2.2. 设置柱状图格式
颜色代码
'b' 表示蓝色
'g' 表示绿色
'r' 表示红色
'c' 表示青色
'm' 表示品红色
'y' 表示黄色
'k' 表示黑色
'w' 表示白色。
代码如下(在2.2.1目录的代码基础上增加了:图片长宽、柱子宽度/颜色、边框宽度/颜色)
import pandas
import matplotlib.pyplot as plt# 防止乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 读取Excel文件内容
df = pandas.read_excel(r'E:\test.xlsx', sheet_name='Sheet1')# 设置图片大小(长15,宽8)
fig = plt.figure(figsize=(15, 8))
ax = fig.add_subplot()# 获取第一行的名称
column_names = df.columns.tolist()# 去除第一行,并转置数据
data = df.T# 创建柱状图
data.plot(kind='bar', #指定绘制的类型为柱状图(line:折线图(默认),bar:柱状图,barh:水平柱状图,hist:直方图,box:箱线图,kde:核密度估计图,density:密度图,area:面积图,scatter:散点图,hexbin:Hexbin 图(用于显示二维数据的分布情况))color='y', #设置柱子颜色(黄色,见颜色代码)width=0.8, # 设置柱子宽度edgecolor='k', #设置柱子边框颜色(黑色,见颜色代码)linewidth=2, #设置柱子边框宽度ax=ax #设置图片大小
)# 设置柱子的名称(rotation旋转柱子标题的度数)
plt.xticks(range(len(column_names)), column_names, rotation=0)# 添加标题和坐标轴标签
plt.title('图表标题')
plt.xlabel('横轴标题')
plt.ylabel('纵轴标题')# 显示柱状图
plt.show()
绘制结果如下

3. 将生成的折线图写入html文件
3.1. 直接写入图片
使用 MarkupPy 将图片写入html文件
from MarkupPy import markup# 添加图片,设置长、宽
page = markup.page()
page.add('<img src="./filename.png" alt="csv生成的折线图" width="800" height="500">')# 写入文件
with open('./tmp.html', 'w') as file:file.write(str(page))
代码如下(以csv生成的折线图为例)
import pandas
import matplotlib.pyplot as plt
from MarkupPy import markup# 设置csv文件路径
file = r'E:\test.csv'# 防止中文乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 通过pandas读取文件内容
df = pandas.read_csv(file)
# 将文件第一行设置为序列名称
series_names = df .columns# 将文件数据绘制为折线图
plt.plot(df)
plt.legend(series_names) #设置序列名称
plt.xlabel('横轴标题') #设置横坐标名称
plt.ylabel('纵轴标题') #设置纵坐标名称
plt.title('图表标题') #设置图表标题# 保存图表为png文件
plt.savefig('./filename.png')# 添加图片
page = markup.page()
page.add('<img src="./filename.png" alt="csv生成的折线图" width="800" height="500">')# 写入文件
with open('./tmp.html', 'w') as file:file.write(str(page))
结果如下

3.2. 添加文字描述
文件描述见 MarkupPy 的详细使用方法
超链接:Python模块MarkupPy & 自定义html报告
相关文章:
Python读取csv、Excel文件生成图表
简介 本文章介绍了通过读取 csv 或 Excel 文件内容,将其转换为折线图或柱状图的方法,并写入 html 文件中。 目录 1. 读取CSV文件 1.1. 生成折线图 1.1.1. 简单生成图表 1.1.2. 设置折线图格式 1.2. 生成柱状图 1.2.1. 简单生成图表 1.2.2. 设置柱…...
虚拟机中Linux的IP地址配置详解
目录 第一章、虚拟机中Linux的IP地址配置详解1.1)什么是IP地址1.2)如何查看自己电脑ip地址1.3)虚拟机NAT模式中Linux的IP地址设置有什么要求 第二章、使用Linux中的编辑命令进行网卡信息文件的配置 友情提醒 先看文章目录,大致了…...
Codeforces Round 889 (Div. 2) 题解
晚上睡不着就来总结一下叭~(OoO) 赛后榜(希望不要被Hack...Orz) 终榜!!! 瞬间的辉煌(呜呜呜~) 先不放图了。。怕被dalaoHack...呜呜呜~ 总结 7.29半夜比赛,本来是不想打的,感觉最近做的题太多…...
系统学习Linux-MySQL用户权限管理(三)
一、用户权限管理概述 数据库用户权限管理是数据库系统中非常重要的一个方面,它用于控制不同用户访问和操作数据库的权限范围。数据库用户权限管理可以保护敏感数据和数据库结构,确保只有被授权的用户才可以操作和使用数据库,防止数据被修改…...
【雕爷学编程】MicroPython动手做(02)——尝试搭建K210开发板的IDE环境4
7、使用串口工具 (1)连接硬件 连接 Type C 线, 一端电脑一端开发板 查看设备是否已经正确识别: 在 Windows 下可以打开设备管理器来查看 如果没有发现设备, 需要确认有没有装驱动以及接触是否良好 (2&a…...
阿里云NVIDIA A100 GPU云服务器性能详解及租用费用
阿里云GPU服务器租用费用表包括包年包月、一个小时收费以及学生GPU服务器租用费用,阿里云GPU计算卡包括NVIDIA V100计算卡、T4计算卡、A10计算卡和A100计算卡,GPU云服务器gn6i可享受3折,阿里云百科分享阿里云GPU服务器租用表、GPU一个小时多少…...
数字身份、分布式存储、跨链技术等将如何推动Web3数据的发展?
Web3数据是基于区块链技术、去中心化、可信任的数据,具有较高的安全性和可信度。随着Web3.0时代的到来,Web3数据将会在金融、物联网、医疗、教育、政务等领域发挥重要的作用。其中,数字身份、分布式存储、跨链技术等将会是Web3数据发展的重要…...
Ubuntu 新增2T 硬盘,配置自动挂载
Ubuntu 台式机内存太小了,增加了一块 2T 的硬盘,记录下配置过程: 查看硬盘信息 可以看出,我电脑当前有三块硬盘: (1) /dev/nvme0n1 系统盘,256 G,分了两个区 /dev/nvme0n…...
Windows下安装HBase
Windows下安装HBase 一、HBase简介二、HBase下载安装包三、环境准备3.1、 JDK的安装3.2、 Hadoop的安装 四、HBase安装4.1、压缩包解压为文件夹4.2、配置环境变量4.3、%HBASE_HOME%目录下新建临时文件夹4.4、修改配置文件 hbase-env.cmd4.4.1、配置JAVA环境4.4.2、set HBASE_MA…...
在家构建您的迷你 ChatGPT
这篇文章分为三个部分;他们是: 什么是指令遵循模型?如何查找遵循模型的指令构建一个简单的聊天机器人废话不多说直接开始吧!!! 什么是指令遵循模型? 语言模型是机器学习模型,可以根…...
Cisco IOS操作(红茶三杯CCNA)
Cisco路由器组件 CPU:执行指令RAM:断电内容丢失 运行操作系统运行配置文件IP路由表ARP缓存数据包缓存区 ROM:保存开机自检软件,存储路由器的启动引导程序 bootstrap指令基本的自检软件迷你版IOS 非易失RAM(NVRAM&#…...
在Linux中用strsignal函数输出对各种信号的描述
2023年7月29日,周六上午 目录 函数原型Linux有多少种信号使用示例 函数原型 #include <string.h>char* strsignal(int signum);strsignal函数接受一个整数参数signum,表示信号的编号。 用于把信号编号转换成一个简短的对这个信号编号的描述。 L…...
分布式文件存储与数据缓存 Redis高可用分布式实践(上)
一、Reids概述 1.1 为什么要使用NoSQL 单机Mysql的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。在那个时候,更多的都是静态网页,动态交互类型的网站不多。 遇到问题: 随着用户数的…...
chatglm2外挂知识库问答的简单实现
一、背景 大语言模型应用未来一定是开发热点,现在一个比较成功的应用是外挂知识库。相比chatgpt这个知识库比较庞大,效果比较好的接口。外挂知识库大模型的方式可以在不损失太多效果的条件下获得数据安全。 二、原理 现在比较流行的一个方案是langcha…...
从0到1开发go-tcp框架【1-搭建server、封装连接与业务绑定、实现基础Router、抽取全局配置文件】
从0到1开发go-tcp框架【1-搭建server、封装连接与业务绑定、实现基础Router】 本期主要完成对Server的搭建、封装连接与业务绑定、实现基础Router(处理业务的部分)、抽取框架的全局配置文件 从配置文件中读取数据(服务器监听端口、监听IP等&a…...
建设银行秋招指南,备考技巧和考试内容详解
建设银行秋招简介 银行作为非常吃香的岗位,每年都有不少同学通过投递简历,进入笔试,再到面试成功,成功到银行就职,也有相当一部分同学因为信息差,符合条件却没有报名。无法进入银行工作。 建设银行的秋招…...
Cilium 系列-7-Cilium 的 NodePort 实现从 SNAT 改为 DSR
系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能。但是通过对 Cilium 不同模式的切换/功能的启用,可以进一步提升 Cilium 的网络性能。具体调优项包括不限于: 启用本地路由 (Native Rou…...
React的hooks---useReducer
useReducer 作为 useState 的代替方案,在某些场景下使用更加适合,例如 state 逻辑较复杂且包含多个子值,或者下一个 state 依赖于之前的 state 等。 使用 useReducer 还能给那些会触发深更新的组件做性能优化,因为父组件可以向自…...
自然语言处理从入门到应用——LangChain:模型(Models)-[文本嵌入模型Ⅱ]
分类目录:《自然语言处理从入门到应用》总目录 本文将介绍如何在LangChain中使用Embedding类。Embedding类是一种与嵌入交互的类。有很多嵌入提供商,如:OpenAI、Cohere、Hugging Face等,这个类旨在为所有这些提供一个标准接口。 …...
Olap BI工具对比
背景 目前公司主要使用数据存储有MySQL、ES、Hive、HBase、TiDB等 MySQL用于存储应用的基本支撑数据,数据量少;ES和Hbase用于存储和查询调用记录,数据量多;Hive和TiDB用于DC上使用,数据量多。主要使用的数据分析平台…...
AFL++实战:从零开始用WSL搭建模糊测试环境(附libxml2案例)
AFL实战指南:WSL环境下的模糊测试从入门到精通 模糊测试(Fuzz Testing)作为软件安全测试的重要手段,近年来在漏洞挖掘领域展现出惊人的效果。对于Windows平台开发者而言,Windows Subsystem for Linux(WSL&…...
告别桌面图标混乱:NoFences让你的数字空间井然有序
告别桌面图标混乱:NoFences让你的数字空间井然有序 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否曾打开电脑就被满屏散乱的图标淹没?工作文件…...
Pi0具身智能v1快速部署指南:一键启动交互测试页面
Pi0具身智能v1快速部署指南:一键启动交互测试页面 1. 环境准备与镜像部署 1.1 选择合适的基础环境 在开始部署Pi0具身智能v1之前,请确保您的平台满足以下基本要求: 硬件配置:建议至少16GB显存的GPU(如NVIDIA RTX 3…...
拓扑排序别再死记硬背了!用邻接矩阵手搓一个(附C++/C语言单文件实现)
拓扑排序的工程化实现:从邻接矩阵到零依赖代码实战 第一次接触拓扑排序时,我盯着教科书上的算法描述看了半天——"选择一个入度为0的顶点并输出"、"从图中删除该顶点和所有以它为起点的有向边"——这些抽象的描述让我困惑不已。直到…...
深入解析STM32与FreeRTOS内存管理:从理论到实践的最佳配置策略
1. STM32内存结构深度剖析 第一次接触STM32内存管理时,我也被那些专业术语搞得晕头转向。直到把开发板跑死机十几次后,才真正理解RAM和Flash的区别。简单来说,RAM就像你的办公桌面,随时可以读写但断电就清空;Flash则是…...
Pixel Mind Decoder 异常情绪监测:在系统日志中定位用户不满信号
Pixel Mind Decoder 异常情绪监测:在系统日志中定位用户不满信号 1. 运维场景中的情绪危机 你有没有遇到过这种情况:系统运行一切正常,监控指标全绿,但用户满意度却在悄悄下滑?等到收到大量投诉时,问题已…...
Wan2.1 VAE与微信小程序开发结合:打造个人AI头像生成工具
Wan2.1 VAE与微信小程序开发结合:打造个人AI头像生成工具 你有没有想过,用一张自己的照片,就能快速生成几十种不同风格的艺术头像?无论是动漫风、油画感,还是赛博朋克,都能一键搞定。以前这可能需要专业的…...
Windows更新修复新范式:Reset-Windows-Update-Tool的系统化解决方案
Windows更新修复新范式:Reset-Windows-Update-Tool的系统化解决方案 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool …...
运算放大器入门难?这篇超详细运算放大器原理与应用指南帮你轻松上手!
1. 运算放大器到底是什么? 第一次接触运算放大器时,我也被这个专业名词吓到了。但后来发现,它其实就是个"超级放大镜"——能把微弱的电信号放大成千上万倍。想象一下医生用的听诊器,它能将微弱的心跳声放大到清晰可闻&a…...
像素风AI工具体验:像素史诗智识终端,让研究变得有趣又高效
像素风AI工具体验:像素史诗智识终端,让研究变得有趣又高效 1. 引言:当科研遇上像素冒险 想象一下:你是一位勇者,站在像素风格的城堡前,准备开始一场史诗般的冒险。但这次,你的武器不是剑与盾&…...
