我正在尝试关注youtube上的教程,现在在教程中他们使用matplotlib.pyplot绘制一些标准文本文件,我可以很容易地实现这一点,但是我现在尝试使用一些csvs执行相同的操作我有真实数据。
我使用的代码是导入matplotlib.pyplot作为plt 导入csv #import numpy as np
with open(r"Example RFI regression axis\Delta RFI.csv") as x, open(r"Example RFI regression axis\strikerate.csv") as y:
readx = csv.reader(x)
ready = csv.reader(y)
plt.plot(readx,ready)
plt.title ('Test graph')
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.show()
我收到的追溯很长
Traceback (most recent call last):
File "C:\V4 code snippets\matplotlib_test.py", line 11, in <module>
plt.plot(readx,ready)
File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 2832, in plot
ret = ax.plot(*args, **kwargs)
File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 3997, in plot
self.add_line(line)
File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 1507, in add_line
self._update_line_limits(line)
File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 1516, in _update_line_limits
path = line.get_path()
File "C:\Python27\lib\site-packages\matplotlib\lines.py", line 677, in get_path
self.recache()
File "C:\Python27\lib\site-packages\matplotlib\lines.py", line 401, in recache
x = np.asarray(xconv, np.float_)
File "C:\Python27\lib\site-packages\numpy\core\numeric.py", line 320, in asarray
return array(a, dtype, copy=False, order=order)
TypeError: float() argument must be a string or a number
请告知我需要做什么,我意识到对于大多数经验丰富的程序员来说这可能很容易。亲切的问候SMNALLY
答案 0 :(得分:9)
csv.reader()
返回字符串(从技术上讲,读者对象的.next()
方法返回字符串列表)。如果不将它们转换为float
或int
,您将无法plt.plot()
它们。
为了省去转换的麻烦,我建议您使用genfromtxt()
中的numpy
。 (http://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html)
例如,有两个文件: data1.csv:
data1
2
3
4
3
6
6
4
和data2.csv:
data2
92
73
64
53
16
26
74
他们都有一行标题。我们可以这样做:
import numpy as np
data1=np.genfromtxt('data1.csv', skip_header=1) #suppose it is in the current working directory
data2=np.genfromtxt('data2.csv', skip_header=1)
plt.plot(data1, data2,'o-')
结果: