我正在尝试在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)
答案 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
对要绘制的其他变量执行相同的操作。