使用不同的matplotlib版本进行绘图的差异 [英] Difference in plotting with different matplotlib versions

查看:275
本文介绍了使用不同的matplotlib版本进行绘图的差异的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

A colleague of mine handed me a script that is used to collect data from a database and plot it. When I used the script myself, the plots do not look the same, and it has to do with the version of Matplotlib.

用于绘制数据的脚本非常短:

The script that does the plotting of the data is quite short:

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运行它时,它看起来应该是这样的:

When I run it using Matplotlib version 2.1.0, my image looks like this: When I run it using Matplotlib version 2.0.2, it looks the way it is supposed to:

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

The file the script is reading looks like this:

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中导致此问题的更改吗?显然,我在造成这种情况的绘图上做错了.谁能注意到一个错误? 我已经尝试使用

Can anyone explain me what was changed in Matplotlib that caused this? And apparently I'm doing something wrong with the plotting that is causing this. Can anyone notice a mistake? I've already tried using

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

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

But that didn't solve it. Note: I'd rather not use any non-standard packages (like Pandas) since it's quite a hassle to get approvement to install such packages.

推荐答案

数据以字符串形式读取.在matplotlib 2.0中,这些变量会自动转换为浮点数,以便可以进行绘制.

The data is read in as strings. In matplotlib 2.0 those were automatically converted to floating point numbers such that they can be plotted.

在matplotlib 2.1中,已引入分类图.现在允许类似

In matplotlib 2.1, categorical plots have been introduced. This now allows for something like

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

尽管这当然对某些应用程序非常有用,但它打破了以前绘制可转换为浮点数的字符串的选项.我想这还好,它只是赋予用户自己进行转换的责任.

While this is of course great for certain applications, it breaks the previous option of plotting strings that are convertable to floats. I guess this if fine, it just gives the user the responsibility to do the conversion himself.

在这种情况下,您希望像这样进行转换

In this case you would want to do this conversion like

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

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

In case you already have a numpy array: np.array(values).astype(float)

通常,可以使用numpy.loadtxt将文件读取到float数组中.如果文件包含日期,请使用

In general, one can use numpy.loadtxt to read files into float arrays. If the file contains dates, usage of a converter as in reading a comma-delimited file with a date object and a float with Python would be possible.

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

Another option to read in text files would be pandas.read_csv.

这篇关于使用不同的matplotlib版本进行绘图的差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆