Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用matplotlib以异常方式组织的打印数据_Python_Matplotlib_Gnuplot - Fatal编程技术网

Python 使用matplotlib以异常方式组织的打印数据

Python 使用matplotlib以异常方式组织的打印数据,python,matplotlib,gnuplot,Python,Matplotlib,Gnuplot,我有一个代码库的输出,它在材料中产生“带”的能量。数据以左手列表示索引,第二列表示能量。当我在GNUplot中绘制它时,我得到: 文本文件中的数据组织如下: 0 -3.2101962802476773 0 -3.2101962802476773 0 -3.2101962802476773 0 -2.8612484511071283 0 -2.8612484511071212 0 -2.855472070340414 0 -2.855472070340414 0

我有一个代码库的输出,它在材料中产生“带”的能量。数据以左手列表示索引,第二列表示能量。当我在GNUplot中绘制它时,我得到:

文本文件中的数据组织如下:

0   -3.2101962802476773
0   -3.2101962802476773
0   -3.2101962802476773
0   -2.8612484511071283
0   -2.8612484511071212
0   -2.855472070340414
0   -2.855472070340414
0   -2.8473558653791424
1   -3.2098593700677056
1   -3.2098593700677056
1   -2.871177955425835
1   -2.871177955425834
1   -2.8651192493631106
1   -2.865119249363109
1   -2.846669223652509
1   -2.846669223652504
2   -3.209297896654713
2   -3.209297896654713
2   -2.8811028573856685
2   -2.881102857385668
2   -2.8750382428650094
2   -2.875038242865009
2   -2.8460674384836837
2   -2.846067438483675   

在那里我可以(有些)清楚地看到结构,尽管颜色使它很难。我想使用python和matplotlib将第一行数据与第一个实例进行匹配,其中左列的值发生了变化(因此将第一(x,y)对映射到相应的行,其中x现在为1),第二、第三、第四行等也一样。然后将这些x和y的集合绘制到同一个图形上。有没有一个好的编程方法来实现这一点?那么,是否也有一种好方法来确保每条线(将有100条)具有不同的颜色/可相互区分

我想做一个循环,将每个值元组的第一个打包成一个dict中的键值对,然后将所有这些dict绘制在一个图上,但不完全确定其语法

非常感谢你

编辑

在注释中添加OP给出的代码:

打开('BANDS.OUT','r')作为f:
行=f.读行()
x=[float(line.split()[0])表示行中的行]
y=[float(line.split()[1])表示行中的行]

在将数据帧加载为df后尝试以下操作(希望我正确理解了您的重新排列):


然后,您可以将df_转换为新数据并绘制数据。

“将第一行数据与第一行匹配(将一行…与同一行匹配?)该列(哪列?!)的值发生了变化(与什么相比发生了变化?”)-您能澄清一下吗?我添加了一些编辑以显示数据,使其更加清晰。基本上,我希望第一行(0-3.2101962802476773)进入一个dict,第一行x发生了变化(1-3.2098593700677056),依此类推,然后对第二行重复这个过程,从0开始,继续。这有意义吗?文字很难解释!好的,那么您编写了什么代码来实现这一点,以及您到底被困在了哪里?到目前为止,我已经将open('BANDS.OUT','r')作为f:lines=f.readlines()x=[float(line.split()[0])表示行内行]y=[float(line.split()[1])表示行内行]我一直在写一个循环,该循环对x和y的每一行进行索引,使它们彼此匹配正确的值。(抱歉格式化)为什么不使用熊猫来读取此文件
pd.read\u csv('path/to/file.txt',sep='\t')
查看此快速绘图。这似乎有效!谢谢
df.columns=['x','y']
df_new=pd.DataFrame()

lendf = len(df['x'].drop_duplicates())


for i in range(0, lendf): 
    df_new = pd.concat([df_new,df[df['x'] == i].reset_index(drop = True)], axis=1,ignore_index=True)
    df_new.drop(df_new.columns[i],axis=1, inplace=True)

df_new.columns = [i for i in range(0, lendf)]