使用不同版本的 matplotlib 进行绘图的差异

2024-11-27 10:43:00
admin
原创
13
摘要:问题描述:我的同事给了我一个脚本,用于从数据库中收集数据并绘制图表。当我自己使用该脚本时,图表看起来不一样,这与 Matplotlib 的版本有关。绘制数据图表的脚本非常短:import matplotlib.pyplot as plt import csv import os from dateutil i...

问题描述:

我的同事给了我一个脚本,用于从数据库中收集数据并绘制图表。当我自己使用该脚本时,图表看起来不一样,这与 Matplotlib 的版本有关。

绘制数据图表的脚本非常短:

import matplotlib.pyplot as plt
import csv
import os
from dateutil import parser

def plot(outputDir,plotsDir,FS):
    allfiles = os.listdir(outputDir)
    flist = []
    for f in allfiles:
        if 'csv' in f.lower(): flist.append(f)
    for f in flist:
        with open(outputDir + '/' + f, 'rt') as ff:
            data = list(csv.reader(ff,delimiter=FS))
        values = [i[2] for i in data[1::]]
        values = ['NaN' if v is '' else v for v in values]
        time = [parser.parse(i[1]) for i in data[1::]]
        plt.xlabel('Time_[UTC]')
        plt.plot(time, values)
        plt.xticks(rotation=40)
        if os.path.isdir(plotsDir) != 1:
            os.mkdir(plotsDir, 777)
        plt.savefig('{}/{}_Data.png'.format(plotsDir, f[:-4]), bbox_inches='tight', dpi=160)
        plt.clf()


outputdir = 'C:/Users/matthijsk/Documents/Test'
plotsdir = outputdir + '/plots'
fs = ','
plot(outputdir, plotsdir, fs)

当我使用 Matplotlib 版本 2.1.0 运行它时,我的图像如下所示:
Matplotlib 版本 2.1.0
当我使用 Matplotlib 版本 2.0.2 运行它时,它看起来像它应该的那样:
Matplotlib 版本 2.0.2

脚本正在读取的文件如下所示:

stationNo,dtg(UTC),TT_[°C],source_TT,quality_TT
10381,2017-01-01 00:00:00,3.0,ob,na
10381,2017-01-01 01:00:00,3.0,ob,na
10381,2017-01-01 02:00:00,2.4,ob,na
10381,2017-01-01 03:00:00,2.5,ob,na
10381,2017-01-01 04:00:00,2.5,ob,na
10381,2017-01-01 05:00:00,2.3,ob,na
10381,2017-01-01 06:00:00,1.9,ob,na
10381,2017-01-01 07:00:00,1.0,ob,na
10381,2017-01-01 08:00:00,0.1,ob,na
10381,2017-01-01 09:00:00,0.9,ob,na

有人能解释一下 Matplotlib 中发生了哪些变化导致这种情况吗?显然我在绘图时做了一些错误,导致了这种情况。有人能注意到错误吗?我已经尝试使用

values = [float(value) if value.isnumeric() else None for value in values]

但这并没有解决问题。注意:我宁愿不使用任何非标准软件包(例如 Pandas),因为获得安装此类软件包的批准相当麻烦。


解决方案 1:

数据以字符串形式读入。在 matplotlib 2.0 中,这些字符串会自动转换为浮点数,以便可以绘制。

在 matplotlib 2.1 中,引入了分类图。现在允许类似

plt.plot(["apple", "banana", "cherry"], [2,1,3])

虽然这对于某些应用程序来说当然很棒,但它破坏了之前绘制可转换为浮点数的字符串的选项。我想这没问题,只是让用户自己负责进行转换。

在这种情况下,你可能想做这样的转换

values = [None if v is '' else float(v) for v in values]

如果你已经有一个 numpy 数组:np.array(values).astype(float)

一般情况下,可以使用numpy.loadtxt将文件读入浮点数组。如果文件包含日期,则可以使用转换器,例如使用 Python 读取带有日期对象和浮点的逗号分隔文件。

读取文本文件的另一种选择是pandas.read_csv

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   649  
  如何借鉴华为IPD体系优化企业研发?在当今竞争激烈的市场环境中,企业要想保持技术领先和产品竞争力,必须拥有一套高效且严谨的研发管理体系。华为作为全球领先的ICT解决方案提供商,其集成产品开发(IPD, Integrated Product Development)体系与质量管理体系(如ISO 9000系列)的融合实践,...
IPD项目管理   0  
  IPD流程图的7种经典绘制方法详解在产品开发领域,集成产品开发(Integrated Product Development,简称IPD)流程被广泛应用,以提高产品开发的效率和质量。IPD流程图作为这一流程的可视化工具,其绘制方法至关重要。本文将详细介绍七种经典的IPD流程图绘制方法,帮助项目管理人员和团队更好地理解和...
IPD研发管理体系   0  
  IPD流程:企业创新管理的核心引擎在当今快速变化的市场环境中,企业要想持续保持竞争力,就必须不断进行创新。而IPD(Integrated Product Development,集成产品开发)流程作为一种先进的产品开发管理模式,正逐渐成为众多企业提升创新能力、加速产品上市速度、降低开发成本的重要选择。本文将深入探讨IP...
IPD管理   0  
  IPD流程与传统产品开发流程的概述在产品开发领域,企业不断寻求高效、系统的管理方法以确保产品能够顺利从概念转化为市场成功的产品。集成产品开发(Integrated Product Development,简称IPD)流程与传统产品开发流程是两种截然不同的管理理念和方法。传统产品开发流程往往以职能部门为核心,各部门按顺序...
IPD流程中PDCP是什么意思   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用