Python基于Excel多列长度不定的数据怎么绘制折线图?

简介: 本文档详述了如何运用Python从CSV格式的Excel文件中读取特定范围的数据,并基于这些数据绘制多条折线图。文件的第一列代表循环增长的时间序列,后续各列包含不同属性的数据。通过指定起始与结束行数,可选取一个完整的时间循环周期内的数据进行绘图。每列数据以不同颜色和线型表示,并且图片长度会根据时间序列的长度动态调整,确保图表清晰易读。最终生成的图表将保存至指定文件夹。

  本文介绍基于Python语言,读取Excel表格数据,并基于给定的行数范围内的指定列数据,绘制多条曲线图,并动态调整图片长度的方法。

  首先,我们来明确一下本文的需求。现有一个.csv格式的Excel表格文件,其第一列为表示时间的数据,而靠后的几列,也就是下图中紫色区域内的列,则是表示对应日期的属性的数据;如下图所示。

  其中,第一列是一个表示时间循环增长的列,其数值从2023001开始,到2023365结束,然后会继续再从2023001开始,以此类推;并且每一个循环中,有些日期可能会缺失,即并不是每天都有数据的。

  我们现在希望,对于给定的行数起始值结束值(已知这个起始值与结束值对应的第一列数据,肯定是一个完整的时间循环),基于表格中后面带有数据的几列(也就是上图中紫色区域内的数据),绘制曲线图;并且由于这几列数据所表示的含义不同,希望用不同颜色、不同线型来表示每一列的数据。其中,我们希望具体绘制的结果如下图所示。

  可以看到,横坐标就是表示时间的数据,纵坐标就是那几列含有数据的列;此外,还需要注意,前面也提到了,时间数据是不断循环的,而每一个循环中时间的数量是不确定的。因此,我们还希望绘制出来的图片,可以根据循环中时间的数量(或者说是循环的长度),来动态调整其长度

  明确了需求,即可开始撰写代码。本文所用代码如下。

python

代码解读

复制代码

# -*- coding: utf-8 -*-

"""
Created on Wed May 15 10:34:17 2024

@author: fkxxgis
"""

import os
import pandas as pd
import matplotlib.pyplot as plt

csv_file = r"E:\04_Reconstruction\99_MODIS\Train_Model_0715_Main_Combine.csv"
pic_folder = r"E:\04_Reconstruction\99_MODIS\pic"
idx_start = 520351
idx_end = 520389

df = pd.read_csv(csv_file)
selected_data = df.iloc[idx_start : idx_end]

time = selected_data.iloc[:, 0]
time_x = range(len(time))

blue_pre = selected_data.iloc[:, 9]
blue_tru = selected_data.iloc[:, 10]
green_pre = selected_data.iloc[:, 11]
green_tru = selected_data.iloc[:, 12]
red_pre = selected_data.iloc[:, 13]
red_tru = selected_data.iloc[:, 14]
nir_pre = selected_data.iloc[:, 15]
nir_tru = selected_data.iloc[:, 16]
ndvi_pre = selected_data.iloc[:, 17]
ndvi_tru = selected_data.iloc[:, 18]

plt.figure(figsize = ((idx_end - idx_start) * 0.45, 5))

plt.plot(time_x, blue_pre, 'b-', label = "Blue Predict")
plt.plot(time_x, blue_tru, 'b--', label = "Blue Actual")
plt.plot(time_x, green_pre, '-', color = "lime", label = "Green Predict")
plt.plot(time_x, green_tru, '--', color = "lime", label = "Green Actual")
plt.plot(time_x, red_pre, 'r-', label = "Red Predict")
plt.plot(time_x, red_tru, 'r--', label = "Red Actual")
plt.plot(time_x, nir_pre, '-', color = "orange", label = "NIR Predict")
plt.plot(time_x, nir_tru, '--', color = "orange", label = "NIR Actual")
plt.plot(time_x, ndvi_pre, '-', color = "darkgreen", label = "NDVI Predict")
plt.plot(time_x, ndvi_tru, '--', color = "darkgreen", label = "NDVI Actual")

plt.rc("font", family = "Times New Roman")
plt.legend(ncol = 2)
plt.xticks(time_x, time, rotation = 45)

plt.savefig(os.path.join(pic_folder, str(idx_start) + "_" + str(idx_end)), dpi = 300, bbox_inches = "tight", pad_inches = 0.05)
plt.show()

  其中,我们首先导入必要的库。os用于处理文件路径,pandas用于读取和处理表格文件数据,matplotlib.pyplot用于绘制图表。

  接下来,我们定义文件路径和索引范围。csv_file表示输入.csv格式文件的路径,pic_folder表示输出图片的文件路径,idx_start表示数据的起始索引,idx_end表示数据的结束索引。

  接下来,我们读取.csv格式文件并选择指定范围的数据。df = pd.read_csv(csv_file)表示读取.csv格式文件并创建DataFrame,而后通过selected_data = df.iloc[idx_start : idx_end]选择指定索引范围的数据,也就是处于指定行数内的数据;time就是第一列数据,也就是一个循环内的时间序列,time_x则用于显示图片的x轴刻度——之所以需要这个,是因为我这里希望用字符的形式来表示图片中x轴的刻度(如果用数字的话,那么相当于一年365天对应的x轴长度都是固定的365个刻度;而对于时相缺失比较多的循环,这样绘制出来的图不好看)。随后,分别提取本文开头图片中紫色框内的数据,其分别表示蓝色、绿色、红色、近红外和NDVI的预测值和实际值。

  随后,即可绘制曲线图。首先,通过plt.figure(figsize = ((idx_end - idx_start) * 0.45, 5))动态设置图片尺寸,使用plt.plot()函数绘制每个指标的预测值和实际值;同时,设置图例、x轴刻度旋转等属性,并保存图片;最后,通过plt.show()显示绘制的图片。

  运行上述代码,即可获得本文开头第二幅图所示的图片结果。


转载来源:https://juejin.cn/post/7403683232807501875

相关文章
|
1天前
|
数据挖掘 PyTorch TensorFlow
|
2天前
|
数据采集 数据挖掘 数据处理
使用Python和Pandas处理CSV数据
使用Python和Pandas处理CSV数据
17 5
|
3天前
|
数据采集 存储 数据挖掘
使用Python读取Excel数据
本文介绍了如何使用Python的`pandas`库读取和操作Excel文件。首先,需要安装`pandas`和`openpyxl`库。接着,通过`read_excel`函数读取Excel数据,并展示了读取特定工作表、查看数据以及计算平均值等操作。此外,还介绍了选择特定列、筛选数据和数据清洗等常用操作。`pandas`是一个强大且易用的工具,适用于日常数据处理工作。
|
4天前
|
安全 数据安全/隐私保护 Python
情书也能加密?Python AES&RSA,让每一份数据都充满爱的密码
【9月更文挑战第8天】在这个数字化时代,情书不再局限于纸笔,也可能以电子形式在网络中传递。为了确保其安全,Python提供了AES和RSA等加密工具,为情书编织爱的密码。首先,通过安装pycryptodome库,我们可以利用AES对称加密算法高效保护数据;接着,使用RSA非对称加密算法加密AES密钥和IV,进一步增强安全性。即使情书被截获,没有正确密钥也无法解读内容。让我们用Python为爱情编织一张安全的网,守护每份珍贵情感。
17 2
|
8天前
|
数据挖掘 数据处理 Python
python如何高效处理excel图表案例分享
python如何高效处理excel图表案例分享
19 2
|
2天前
|
机器学习/深度学习 数据挖掘 TensorFlow
从数据小白到AI专家:Python数据分析与TensorFlow/PyTorch深度学习的蜕变之路
【9月更文挑战第10天】从数据新手成长为AI专家,需先掌握Python基础语法,并学会使用NumPy和Pandas进行数据分析。接着,通过Matplotlib和Seaborn实现数据可视化,最后利用TensorFlow或PyTorch探索深度学习。这一过程涉及从数据清洗、可视化到构建神经网络的多个步骤,每一步都需不断实践与学习。借助Python的强大功能及各类库的支持,你能逐步解锁数据的深层价值。
9 0
|
3天前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
20 0
|
9天前
|
存储 消息中间件 大数据
Python里for循环要遍历的数据很多很大怎么办?
遇到大数据量问题时,重要的是确定最优解决方案,这取决于数据的来源、性质以及所需的处理方式。分析数据传输、存储与处理的瓶颈是提升性能的关键。通过结合上述的技巧和方法,可以在内存和性能方面找到合适的平衡点来处理大规模数据集。
22 0
|
30天前
|
数据可视化 Python
我是如何把python获取到的数据写入Excel的?
我是如何把python获取到的数据写入Excel的?
33 2
|
19天前
|
关系型数据库 MySQL Shell
不通过navicat工具怎么把查询数据导出到excel表中
不通过navicat工具怎么把查询数据导出到excel表中
24 0