gpt4 book ai didi

python - 不同 matplotlib 版本绘图的差异

转载 作者:太空宇宙 更新时间:2023-11-03 21:25:50 25 4
gpt4 key购买 nike

我的一位同事给了我一个脚本,用于从数据库收集数据并绘制它。当我自己使用该脚本时,绘图看起来不一样,这与 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 version 2.1.0当我使用 Matplotlib 版本 2.0.2 运行它时,它看起来应该是这样的: Matplotlib version 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),因为获得安装此类软件包的批准非常麻烦。

最佳答案

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

在 matplotlib 2.1 中,categorical plots have been introduced 。现在允许类似的事情

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

虽然这对于某些应用程序来说当然很棒,但它打破了之前绘制可转换为 float 的字符串的选项。我想这如果可以的话,它只是让用户有责任自己进行转换。

在这种情况下,您需要像这样进行转换

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

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

一般来说,可以使用numpy.loadtxt将文件读入 float 组。如果文件包含日期,则使用 reading a comma-delimited file with a date object and a float with Python 中的转换器。将是可能的。

读取文本文件的另一个选项是pandas.read_csv

关于python - 不同 matplotlib 版本绘图的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53845131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com