接口发生了什么?

2024-06-28 10:57:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个小代码来绘制文件中的一些数据

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


Tags: 文件fromimporttxtdataaspltrow
1条回答
网友
1楼 · 发布于 2024-06-28 10:57:08

在查看了数据和程序之后,发现加载数据时出现问题的原因只有两个

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]

相关问题 更多 >