2017-11-07 3 views
2

私の同僚は、データベースからデータを収集してプロットするスクリプトを私に渡しました。スクリプトを自分で使用したとき、プロットは同じに見えず、Matplotlibのバージョンと関係しています。異なる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のを使用して、それを実行すると Matplotlib version 2.1.0

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 
01:スクリプトは、このようなルックスを読んでいるファイル Matplotlib version 2.0.2

:バージョン2.0.2、それがになっている道を探します

これを引き起こしたMatplotlibで変更されたことは誰でも説明できますか?そして、明らかに私はこれを引き起こしている作図に何か間違っています。誰もが間違いに気付くことができますか? 私は既に試してみました

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

しかし、それはそれを解決しませんでした。 注:標準以外のパッケージ(Pandasなど)を使用するのは、そのようなパッケージのインストールを承認するのは面倒です。

答えて

3

データは文字列として読み込まれます。 matplotlib 2.0では、それらはプロットできるように自動的に浮動小数点数に変換されました。

matplotlib 2.1において、categorical plots have been introducedである。これは、今、これは当然のことながら、特定の用途のための素晴らしいですが、それは浮動小数点数に変換された文字列をプロットの前のオプションを壊す

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

のようなものが可能になります。私はこれはうまくいけば、それはユーザーに変換を自分自身で行う責任を与えていると思います。あなたは

values = [None if v is '' else float(v) for v in values] 
のように、この変換をしたいと思う。この場合

関連する問題