字符串,列表和matplotlib

时间:2013-05-16 10:45:09

标签: string list matplotlib

我正在尝试从文件中读取一些数据然后使用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成为一个字符串或如何使它成为一个列表。有人可以帮忙吗?

2 个答案:

答案 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()