2013-05-16 60 views
2

我想從文件中讀取一些數據,然後取第一行,並使用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 

>

我認爲這是值得做y是一個字符串不是一個名單,但s似乎是一個列表,所以我不知道爲什麼y成爲一個字符串或如何使它成爲一個列表。誰能幫忙?

+0

你有你的文件'F'特殊字符在讀什麼書? –

回答

1

您已正確識別該問題,y是一個字符串。 readlines返回一個字符串列表(文件的每一行都是一個字符串)。當您撥打plot(x, y)時,matplotlib試圖將y解析爲行格式字符串(由於格式設置錯誤而失敗)(doc)。這不是一個錯誤,matplotlib正確地響應你給它的輸入。

你需要做的是將你的行轉換爲數字列表。無法看到您的數據文件,我只能猜測,但我懷疑像

y_flt = [float(n) for n in s[0].split()] 
plt.plot(x, y_flt) 

將做的伎倆。

+2

在附註上,'float'接受並忽略了字符串中的空格,所以'strip()'不是必需的。 (無論如何,任何拖尾或領先的空白將在拆分時被刪除。) –

+0

@JoeKington我認爲我們之前有過這種對話。 – tacaswell

+0

謝謝。這與我最後的結果類似,儘管你很整潔。 ystringlist = s [0] .split() yfloatlist = [float(i)for i in ystringlist] plt.plot(x,yfloatlist) – nancyh

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() 
+0

謝謝我使用下面的ystringlist = s [0] .split () yfloatlist = [float(i)for i in ystringlist] plt.plot(x,yfloatlist) – nancyh

+0

@nancyh很高興我們可以幫助並歡迎來到Stack Overflow!看起來你發現tcaswell的答案比我的更有幫助(沒關係!)。請點擊綠色複選標記接受他的回答,以便我們知道解決方案已找到。 – Hooked

相關問題