使用不同版本的 matplotlib 进行绘图的差异
- 2024-11-27 10:43:00
- admin 原创
- 12
问题描述:
我的同事给了我一个脚本,用于从数据库中收集数据并绘制图表。当我自己使用该脚本时,图表看起来不一样,这与 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.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
。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD