我有一个很长的文本文件,我想在Python中绘图。我使用以下方法导入了文本文件:
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:float()的文字无效: 我该如何解决这个问题?非常感谢任何帮助。
答案 0 :(得分:3)
你应该看看pandas。它使这些任务变得微不足道。例如:假设您有一个名为.csv
的{{1}}文件,看起来像这样
data.csv
然后你可以按如下方式绘制它
x, y
1, 1
2, 4
3, 9
...
修改强>
您可以转置4x10000数据并将其更改为10000x4。这是一个示例,说明如何使用matplotlib绘制10000x4数据。
4ddata.csv
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("data.csv")
plt.plot(df.x, df.y)
plt.show()
plot.py
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
此示例将第四维表示为(点大小) 2
由于您有一个很长的文件,您可能想要使用
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()
而不是
ax.scatter(df.x, df.y, df.z, c=df.u)
这将表示第四维作为颜色,从而防止不必要的视觉混乱。
您遇到的问题是,当您使用ax.scatter(df.x, df.y, df.z, s=df.u)
时,您正在阅读整行。所以你会得到像
for line in f:
Python无法弄清楚如何将此变量转换为float,从而导致错误。这里的无效文字可能是line = "1.23, 4.26, 5.78, 3.44\n"
。此外,使用循环迭代数据绘制可能是非常低效的,您必须尽可能使用提供的函数,因为它们针对它们执行的任务进行了高度优化。