Разница в построении с использованием различных версий 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 версия 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), так как это довольно хлопот, чтобы получить одобрение для установки таких пакетов.

Данные считываются как строки. В matplotlib 2.0 они автоматически преобразуются в числа с плавающей запятой, так что они могут быть построены.

В matplotlib 2.1 были введены категориальные участки . Теперь это позволяет что-то вроде

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

Хотя это, конечно, отлично подходит для определенных приложений, он разбивает предыдущий вариант построения строк, которые можно преобразовать в float. Я предполагаю, что если это хорошо, это просто дает пользователю ответственность за само преобразование.

В этом случае вы хотели бы сделать это преобразование, как

 values = [None if v is '' else float(v) for v in values] 
  • Ленькая оценка в Python
  • Функция возвращает None без оператора return
  • Как определить двумерный массив в Python
  • Как присоединиться к двум файлам данных, для которых значения столбцов находятся в определенном диапазоне?
  • Определите, работает ли Python внутри virtualenv
  • Время обработки увеличивается дольше и после каждой итерации (TensorFlow)
  • Загрузите несколько ветвей в один и тот же каталог, используя репо
  • Преобразование списка кортежей в словарь
  • Как определить пороговое значение для обнаружения только объектов зеленого цвета в изображении: Opencv
  • pandas group и присвоить идентификатор группы, а затем разгруппировать
  • Получить первый элемент из итерабельного, который соответствует условию
  • Interesting Posts

    Как включить JMX в Websphere?

    Конструктор списка инициализаторов, заключенный в скобки

    Как запустить команду запуска Symfony 2 с controllerа

    Оскорбительно ли использовать IDisposable и «использование» в качестве средства для получения «видимого поведения» для безопасности исключений?

    В чем разница между JSF, Servlet и JSP?

    Сколько энергии достаточно?

    Расширенная (80-разрядная) двойная с плавающей запятой в x87, а не SSE2 – мы ее не пропустили?

    Windows 7 Управление компьютером не доступно

    API Карт Google v2 SupportMapFragment внутри ScrollView – пользователи не могут прокручивать карту по вертикали

    Как интерпретировать SMART-атрибуты?

    ListFragment не принимает мой макет

    C # – статические типы не могут использоваться как аргументы типа

    Изменить цвет круга переключателя – Android

    Можно ли увеличить ширину раздела «Все приложения» в меню «Пуск» Windows 10?

    Возвращаемый массив в функции

    Давайте будем гением компьютера.