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报告

                                         

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文章详情页 - 评论功能的实现

目录 1. 准备工作 1.1 创建评论表 1.2 创建评论实体类 1.3 创建 mapper 层评论接口和对应的 xml 实现 1.4 准备评论的 service 层 1.5 准备评论的 controller 层 2. 总的初始化详情页 2.1 加载评论列表 2.1.1 实现前端代码 2.1.2 实现后端代码 2.2 查询当前登录用户的…

Docker安装es以及ik分词器

1、拉取镜像 docker pull elasticsearch:7.10.12、下载对应版本的ik分词、并将它们解压到ik文件夹下&#xff0c;如图 https://github.com/medcl/elasticsearch-analysis-ik/releases 3、在服务器上创建文件夹 mkdir /usr/elklog/elk/es mkdir /usr/elklog/elk/es/data mkdi…

【C进阶】回调函数(指针进阶2,详解,小白必看)

目录 6. 函数指针数组 6.1简单计算器 6.2函数指针数组实现计算器 7. 指向函数指针数组的指针(仅作了解即可) 8.回调函数 8.1关于回调函数的理解​编辑 8.1.1用回调函数改良简单计算器 8.2qsort库函数的使用 8.2.1冒泡排序 8.2.2qsort的概念 8.3冒泡排序思想实现qsor…

docker存储空间报错解决(谨慎操作,会影响原来的容易镜像,不熟练切勿操作)

报错内容 [rootDream package]# docker build -t imapp . [] Building 21.0s (6/19)> [internal] load build definition from Dockerfile 0.1s> > transferring …

TCP 三次握手四次挥手浅析

大家都知道传输层中的TCP协议是面向连接的&#xff0c;提供可靠的连接服务&#xff0c;其中最出名的就是三次握手和四次挥手。 一、三次握手 三次握手的交互过程如下 喜欢钻牛角尖的我在学习三次握手的时候就想到了几个问题&#xff1a;为什么三次握手是三次&#xff1f;不是…

AnimateDiff论文解读-基于Stable Diffusion文生图模型生成动画

文章目录 1. 摘要2. 引言3. 算法3.1 Preliminaries3.2. Personalized Animation3.3 Motion Modeling Module 4. 实验5.限制6. 结论 论文&#xff1a; 《AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning》 github: https://g…

销售易和管易云接口打通对接实战

销售易和管易云接口打通对接实战 来源系统:销售易 销售易CRM支持企业从营销、销售到服务的全流程自动化业务场景&#xff0c;创新性地利用AI、大数据、物联网等新型互联网技术打造双中台型CRM&#xff1b;既能帮助B2B企业连接外部经销商、服务商、产品以及最终用户&#xff0c;…

支持多种通信方式和协议方便接入第三方服务器或云平台

2路RS485串口是一种常用的通信接口&#xff0c;可以支持Modbus Slave协议&#xff0c;并可接入SCADA、HMI、DSC、PLC等上位机。它还支持Modbus RTU Master协议&#xff0c;可用于扩展多达48个Modbus Slave设备&#xff0c;如Modbus RTU远程数据采集模块、电表、水表、柴油发电机…

【Rust学习 | 基础系列3 | Hello, Rust】编写并运行第一个Rust程序

文章目录 前言一&#xff0c;创建项目二&#xff0c;两种编译方式1. 使用rustc编译器编译2. 使用Cargo编译 总结 前言 在开始学习任何一门新的编程语言时&#xff0c;都会从编写一个简单的 “Hello, World!” 程序开始。在这一章节中&#xff0c;将会介绍如何在Rust中编写并运…

强推!大语言模型『百宝书』,一文缕清所有大模型!

夕小瑶科技说 原创 作者 | 王思若 最近&#xff0c;大型语言模型无疑是AI社区关注的焦点&#xff0c;各大科技公司和研究机构发布的大模型如同过江之鲫&#xff0c;层出不穷又眼花缭乱。 让笔者恍惚间似乎又回到了2020年国内大模型“军备竞赛”的元年&#xff0c;不过那时候…

DSA之图(4):图的应用

文章目录 0 图的应用1 生成树1.1 无向图的生成树1.2 最小生成树1.2.1 构造最小生成树1.2.2 Prim算法构造最小生成树1.2.3 Kruskal算法构造最小生成树1.2.4 两种算法的比较 1.3 最短路径1.3.1 两点间最短路径1.3.2 某源点到其他各点最短路径1.3.3 Dijkstra1.3.4 Floyd 1.4 拓扑排…

【前端知识】React 基础巩固(三十六)——RTK中的异步操作

React 基础巩固(三十六)——RTK中的异步操作 一、RTK中使用异步操作 引入RTK中的createAsyncThunk&#xff0c;在extraReducers中监听执行状态 import { createSlice, createAsyncThunk } from "reduxjs/toolkit"; import axios from "axios";export cons…

第七篇:k8s集群使用helm3安装Prometheus Operator

安装Prometheus Operator 目前网上主要有两种安装方式&#xff0c;分别为&#xff1a;1. 使用kubectl基于manifest进行安装 2. 基于helm3进行安装。第一种方式比较繁琐&#xff0c;需要手动配置yaml文件&#xff0c;特别是需要配置pvc相关内容时&#xff0c;涉及到的yaml文件太…

程序员做项目必用的工具【更新中...】

每个程序员多多少少都会有自己简化项目的小工具&#xff0c;我采访了我们公司所有的工程师总结了程序员必备工具篇。 一.unisms 官网&#xff1a;https://unisms.apistd.com/ 不会有人这年头写注册登录还是自己写验证码模块吧&#xff1f; 你该得拥有一个短信验证码平台了&…

【GUI】基于开关李雅普诺夫函数的非线性系统稳定(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

pytest 入门

1,安装pytest 打开终端或命令提示符窗口,在终端中运行以下命令来安装pytest: pip install pytestpip install -i https://pypi.tuna.tsinghua.edu.cn/simple pytest 确保您的系统上已经安装了Python。您可以在终端中运行以下命令来检查Python的安装情况: pytest --version…

汽车分析,随时间变化的燃油效率

简述 今天我们来分析一个汽车数据。 数据集由以下列组成&#xff1a; 名称&#xff1a;每辆汽车的唯一标识符。MPG&#xff1a;燃油效率&#xff0c;以英里/加仑为单位。气缸数&#xff1a;发动机中的气缸数。排量&#xff1a;发动机排量&#xff0c;表示其大小或容量。马力&…

伦敦金在非农双向挂单

对伦敦金投资有一定经验的投资者都知道&#xff0c;在非农时期&#xff0c;伦敦金市场会出现很大的波动&#xff0c;那么我们如何才能抓住这些波动呢&#xff1f;答案是很难的。但是&#xff0c;有些投资者在多年实践中发明了一种双向挂单的方法&#xff0c;这里和大家一切分享…

使用easyui的tree组件实现给角色快捷分配权限功能

这篇文章主要介绍怎么实现角色权限的快捷分配功能&#xff0c;不需要像大多数项目的授权一样&#xff0c;使用类似穿梭框的组件来授权。 具体实现&#xff1a;通过菜单树的勾选和取消勾选来给角色分配权限&#xff0c;在这之前&#xff0c;需要得到角色的菜单树&#xff0c;角色…

vue实现flv格式视频播放

公司项目需要实现摄像头实时视频播放&#xff0c;flv格式的视频。先百度使用flv.js插件实现&#xff0c;但是两个摄像头一个能放一个不能放&#xff0c;没有找到原因。&#xff08;开始两个都能放&#xff0c;后端更改地址后不有一个不能放&#xff09;但是在另一个系统上是可以…