什么发生在界面?

时间:2018-05-28 19:28:51

标签: python python-3.x

我制作了一些代码来绘制文件中的一些数据

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

当我打开保存的文件时,这就是我得到的

Image

我需要做些什么来修理机器?我在Mac OS X中使用Python 3.7

1 个答案:

答案 0 :(得分:0)

在查看了您的数据和程序之后,结果表明您只在加载数据时出于两个原因

x = [row.split(' ')[0] for row in data]
y = [row.split(' ')[1] for row in data]

如果您查看此代码,您会发现xy将是您不想要的字符串列表。它们是字符串是重叠xticksyticks的原因。你希望它们都是花车:

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}}
相关问题