Matplotlib中的错误消息

时间:2015-12-07 20:26:18

标签: python file csv matplotlib

我正在尝试在matplotlib中绘制此数据,我收到以下错误消息:

raise TypeError('Unrecognized argument type %s to close'%type(arg))
TypeError: Unrecognized argument type <type 'list'> to close

我发送给它的数据不是字符串,它是一个浮点数,你可以从下面的代码中看到:

import os
import csv
import glob as g
import pprint as p
import matplotlib.pyplot as plt

os.chdir('F:\\')

def graphWriter():
    for file in g.glob('*.TXT'):
        for col in csv.DictReader(open(file,'rU')):
            set_ = int(col[' Set'])
            iriR = float(col[' IRI R e'])
            iriL = float(col['IRI LWP '])
            rutL = float(col[' RUT L e'])
            rutR = float(col[' RUT R e'])
            start = float(col['Start-Mi'])
            end = float(col['  End-Mi'])

    fig = plt.plot(iriR,iriL)
    plt.show()
    plt.close(fig)

graphWriter()

虽然窗口正在显示数据并且单位是正确的,但图表中也没有线,可能源于明显的数据问题。所以问题是什么导致错误消息,并且导致图表中没有数据行。但这两者很可能是相关的。这里有一些输入数据,虽然我只是试图将两个数据集绘制到右侧,如上图所示:iriR和iriL:

(194.449, 194.549, 90.0, 77.9)
(194.549, 194.649, 84.6, 81.5)
(194.649, 194.749, 88.4, 84.1)
(194.749, 194.849, 69.5, 82.9)
(194.849, 194.949, 76.2, 71.0)

2 个答案:

答案 0 :(得分:1)

也许这会奏效。

import pandas as pd
import matplotlib.pyplot as plt
import glob as g

def graphWriter():
    data = {}
    for file in g.glob('*.TXT'):
        data[file] = pd.read_csv(file)
        # Removes ')' and turn it into float
        data[file][3] = data[file][3].apply(lambda x:x[:-1]).astype(float)

    fig, ax  = plt.subplots()

    for d in data.itervalues():
        ax.plot(d[:,2], d[:,3])

    plt.show()
    plt.close(fig)

graphWriter()

该函数将获得以.TXT结尾的文件列表,然后将它们加载到字典中,其中键是文件的名称。稍后会策划它们。

<强>更新

由于OP发布pandas不可用,因此可以使用numpy

import numpy as np
import matplotlib.pyplot as plt
import glob as g

def graphWriter():
    data = {}
    for file in g.glob('*.TXT'):
        data[file] =  np.fromregex(file, '\d*\.\d*', 
                                   dtype=[('1', float), ('2', float),
                                          ('3', float), ('4', float)])

    fig, ax  = plt.subplots()

    for d in data.itervalues():
        ax.plot(d['3'], d['4'])

    plt.show()
    plt.close(fig)

graphWriter()

答案 1 :(得分:1)

问题是函数plt.plot returns a list of lines(已添加到绘图中)而不是Figure对象---而plt.close只接受Figure个对象。有很多方法可以解决这个问题,

首先,获取数字对象(&#34; g et c urrent f igure&#34;):

fig = plt.gcf()
plt.close(fig)

其次,不带参数调用close:plt.close() ---这将自动关闭活动数字。

第三,关闭所有数字:plt.close('all')

All of these usages are covered in the matplotlib.pyplot.close documentation.

编辑:

下一个问题是您没有将值数组存储到变量中,而只是存储单个浮点值。您可以初始化列表,并将新元素存储到其中。

os.chdir('F:\\')
iriR = []   # Initialize a list

def graphWriter():
    for file in g.glob('*.TXT'):
        for col in csv.DictReader(open(file,'rU')):
            set_ = int(col[' Set'])
            iriR.append(float(col[' IRI R e']))   # Append new entry

对要绘制的其他变量执行相同的操作。