2013-10-03 3 views
2

Я стараюсь следовать руководству по youtube, теперь в учебнике они закладывают некоторые стандартные текстовые файлы, используя matplotlib.pyplot, я могу достичь этого достаточно легко, однако теперь я пытаюсь выполнить то же самое, используя некоторые csvs, у меня есть реальные данные.Построение данных из csv с использованием matplotlib.pyplot

код я использую импорт matplotlib.pyplot в PLT импорт CSV #import NumPy как нп

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

ответ

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-') 

и результат:

enter image description here

+0

Привет CT Zhu, спасибо за ответ, я считаю, что это вполне может быть ответ, который я ищу. Есть ли шанс предоставить более подробную информацию о том, как это сделать для приведенного примера? Большое спасибо SMNALLY – SMNALLY

+0

Добро пожаловать. И пример был просто добавлен. Дайте мне знать, соответствует ли этот пример структуре ваших файлов 'csv'. –

+2

Не нормально Stackoverflow etiquette, но .. Я думаю, я люблю тебя ... много спасибо :) – SMNALLY

Смежные вопросы