我制作了一些代码来绘制文件中的一些数据
from numpy import *
import matplotlib.pyplot as plt
from math import *
with open("specfunc_from_idft_U8p0g_gate-1p5U.txt") as f:
data = f.read()
data = data.split('\n')
x = [row.split(' ')[0] for row in data]
y = [row.split(' ')[1] for row in data]
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_title("Reference plot")
ax1.set_xlabel('$\\omega/U$')
ax1.set_ylabel('$A(\\omega)$')
ax1.plot(x,y, c='r', label='$NRG$')
leg = ax1.legend()
plt.savefig('varying_alpha_hf_withJ_'+str('ff'+'.png'))
档案specfunc_from_idft_U8p0g_gate-1p5U.txt
当我打开保存的文件时,这就是我得到的
我需要做些什么来修理机器?我在Mac OS X中使用Python 3.7
答案 0 :(得分:0)
在查看了您的数据和程序之后,结果表明您只在加载数据时出于两个原因
x = [row.split(' ')[0] for row in data]
y = [row.split(' ')[1] for row in data]
如果您查看此代码,您会发现x
和y
将是您不想要的字符串列表。它们是字符串是重叠xticks
和yticks
的原因。你希望它们都是花车:
x = [float(row.split(' ')[0]) for row in data]
y = [float(row.split(' ')[1]) for row in data]
这样做揭示了加载的主要缺陷:
x = [float(row.split(' ')[0]) for row in data]
ValueError: could not convert string to float:
如果您查看该文件,您会看到在第250行之后,这些行以一个空格开始,该空格将split
函数打破到一个小的程度:
>>> " 0.000000000E+00 0.240699776E+02 0.200482966E+01 0.495502884E-16 0.153587396E+01 0.000000000E+00".split(" ")
['', '0.000000000E+00', '0.240699776E+02', '0.200482966E+01', '0.495502884E-16', '0.153587396E+01', '0.000000000E+00']
正如您所看到的,第一个元素是空的,不能是数字。因此,您应该使用.split(" ")
来代替.split()
,而>>> " 0.000000000E+00 0.240699776E+02 0.200482966E+01 0.495502884E-16 0.153587396E+01 0.000000000E+00".split()
['0.000000000E+00', '0.240699776E+02', '0.200482966E+01', '0.495502884E-16', '0.153587396E+01', '0.000000000E+00']
将处理开始时的空格:
x = [float(row.split()[0]) for row in data]
y = [float(row.split()[1]) for row in data]
所以这是工作加载代码:
{{1}}