我正在尝试从文件中读取一些数据然后使用matplotlib获取第一行并使用matplotlib将其绘制在图表上。
我的代码是
import numpy as np
import matplotlib.pyplot as plt
with open("file path",'r') as f:
s= f.readlines()
y=(s[0])
x=np.arange(0.00,9.04,0.04)
plt.plot(x,y)
plt.ylabel('Probability Distribution')
plt.xlabel('Photometric Redshift')
plt.title('r2')
plt.show()
我收到以下错误消息
Traceback (most recent call last):
File "dsl_2_python.py", line 36, in <module>
plt.plot(x,y)
File "/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py", line 2817, in plot
ret = ax.plot(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/matplotlib/axes.py", line 3996, in plot
for line in self._get_lines(*args, **kwargs):
File "/usr/lib64/python2.7/site-packages/matplotlib/axes.py", line 330, in _grab_next_args
for seg in self._plot_args(remaining, kwargs):
File "/usr/lib64/python2.7/site-packages/matplotlib/axes.py", line 289, in _plot_args
linestyle, marker, color = _process_plot_format(tup[-1])
File "/usr/lib64/python2.7/site-packages/matplotlib/axes.py", line 126, in _process_plot_format
'Unrecognized character %c in format string' % c)
ValueError: Unrecognized character 0 in format string
&GT;
我认为这与y
是字符串而不是列表有关,但s
似乎是一个列表,所以我不知道为什么y
成为一个字符串或如何使它成为一个列表。有人可以帮忙吗?
答案 0 :(得分:2)
您已正确识别问题,y
是一个字符串。 readlines
返回字符串列表(文件的每一行都是一个字符串)。当您调用plot(x, y)
时,matplotlib正在尝试将y
解析为行格式字符串(由于格式错误而失败)(doc)。这不是错误,matplotlib
正在对您提供的输入做出正确回应。
您需要做的是将您的行转换为数字列表。看到你的数据文件,我只能猜测,但我怀疑像
y_flt = [float(n) for n in s[0].split()]
plt.plot(x, y_flt)
会做到这一点。
答案 1 :(得分:2)
将文件“sample.txt”指定为:
2 4 6 8 10 12 20
1 2 3 4 5 6 7
您可能希望使用numpy.loadtxt
来读取文件
import numpy as np
import pylab as plt
S = np.loadtxt("sample.txt")
Y = S[0]
X = np.linspace(0.00,9.04,Y.shape[0])
plt.plot(X,Y)
plt.show()