2

我正在尝试从文件中读取一些数据,然后使用 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

>

我认为这与y作为一个字符串而不是一个列表有关,但s似乎是一个列表,所以我不知道为什么y会变成一个字符串或如何使它成为一个列表。任何人都可以帮忙吗?

4

2 回答 2

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)

会成功的。

于 2013-05-16T14:37:47.623 回答
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()
于 2013-05-16T14:41:08.923 回答