2015-06-19 3 views
0

У меня есть очень длинный текстовый файл, который я хочу построить в Python. Я импортировал текстовый файл с помощью этого:Преобразование текстового файла в Pyplot

import matplotlib.pyplot as plt 

plt.figure() 
with open('6-18-2015 14.2.9.txt') as f: 
    for line in f: 
     line = [float(line)] 
     plt.plot(line) 

Каждый раз, когда я бег кода, я получаю: ValueError: неверный буквальный для поплавка(): Как решить эту проблему? Буду признателен за любую оказанную помощь.

+4

Мы понятия не имеем, как вы можете решить эту проблему, если мы не знаем, что вызывает ошибку. Если он найдет то, что не может быть преобразовано в float, например «1.23», оно выдает ошибку. выполните попытку/за исключением поплавка и добавьте строку печати (строка), если инициировано исключение. Скорее всего, окончание линии может быть хорошим местом для начала. Каждая строка по-прежнему будет заканчиваться. –

+1

Это поможет, если вы можете показать часть файла данных, который вы пытаетесь построить. –

+0

Мои данные - это в основном массив данных 4x10000 от DAQ. Большая часть чисел находится в научной нотации. Если я использую функцию линии печати, я могу распечатать данные просто отлично, но я не могу строить данные в пистолете. – estuckey16

ответ

3

Вы должны взглянуть на pandas. Это делает такие задачи действительно тривиальными. Например: если вы есть .csv файл с именем data.csv, который выглядит как этот

x, y 
1, 1 
2, 4 
3, 9 
... 

, то вы можете построить его следующим образом

import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.read_csv("data.csv") 

plt.plot(df.x, df.y) 
plt.show() 

EDIT:

Вы можете транспонировать ваши данные 4x10000 и измените его на 10000x4. Вот пример, показывающий, как строить данные 10000x4 с использованием matplotlib.

4ddata.csv

x,y,z,u 
10.39, 73.32, 2.02, 28.26 
11.13, 68.71, 1.86, 27.83 
12.71, 74.27, 1.89, 28.26 
11.46, 91.06, 1.63, 28.26 
11.72, 85.38, 1.51, 28.26 
13.39, 78.68, 1.89, 28.26 
13.02, 68.02, 2.01, 28.26 
12.08, 64.37, 2.18, 28.26 
11.58, 60.71, 2.28, 28.26 
8.94, 65.67, 1.92, 27.04 
11.61, 59.57, 2.32, 27.52 
19.06, 74.49, 1.69, 63.35 
17.52, 73.62, 1.73, 63.51 
19.52, 71.52, 1.79, 63.51 
18.76, 67.55, 1.86, 63.51 
19.84, 53.34, 2.3, 63.51 
20.19, 59.82, 1.97, 63.51 
17.43, 57.89, 2.05, 63.38 
17.9, 59.95, 1.89, 63.51 
18.97, 57.84, 2, 63.51 
19.22, 57.74, 2.05, 63.51 
17.55, 55.66, 1.99, 63.51 
19.22, 101.31, 6.76, 94.29 
19.41, 99.47, 6.07, 94.15 
18.99, 94.01, 7.32, 94.08 
19.88, 103.57, 6.98, 94.58 
19.08, 95.38, 5.66, 94.14 
20.36, 100.43, 6.13, 94.47 
20.13, 98.78, 7.37, 94.47 
20.36, 89.36, 8.79, 94.71 
20.96, 84.48, 8.33, 94.01 
21.02, 83.97, 6.78, 94.72 
19.6, 95.64, 6.56, 94.57 

plot.py

import pandas as pd 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 

df = pd.read_csv("4ddata.csv") 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.scatter(df.x, df.y, df.z, s=df.u) 
plt.show() 

Этот пример представляет собой 4-ое измерение, как (размер точки)

enter image description here

Как у Вас есть очень длинный файл, вы можете использовать

ax.scatter(df.x, df.y, df.z, c=df.u) 

вместо

ax.scatter(df.x, df.y, df.z, s=df.u) 

это будет представлять собой 4-е измерение, поскольку, таким образом, цвет предотвращения излишнего визуальных помех.

enter image description here

Проблема в вас случае является то, что при использовании for line in f: вы читаете всю строку. Таким образом, вы получите что-то вроде

line = "1.23, 4.26, 5.78, 3.44\n" 

Python не может понять, как преобразовать эту переменную всплыть и, следовательно, ошибка. Недопустимый литерал здесь, вероятно, ,. Кроме того, использование цикла для итерации данных в сюжет, вероятно, будет крайне неэффективным, вы должны использовать предоставленные функции там, где это возможно, поскольку они сильно оптимизированы для выполняемой задачи.

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