Python 2.7 使用Pyplot打印特定值的特定行

Python 2.7 使用Pyplot打印特定值的特定行,python-2.7,matplotlib,readlines,Python 2.7,Matplotlib,Readlines,我正在尝试绘制两个此类数据文件: name1.fits 0 0 2.40359218172 name2.fits 0 0 2.15961244263 第三列的值从0到5。我想绘制第2列和第4列,但是,对于第3列中的值小于2(0和1)的行,我想将第2列移动-0.1,对于值大于3(4和5)的行,我想将第2列移动+0.1 然而,我的代码似乎将所有值移动+0.1。以下是我到目前为止的情况: import matplotlib.pyplot as plt import numpy as np with

我正在尝试绘制两个此类数据文件:

name1.fits 0 0 2.40359218172
name2.fits 0 0 2.15961244263
第三列的值从0到5。我想绘制第2列和第4列,但是,对于第3列中的值小于2(0和1)的行,我想将第2列移动-0.1,对于值大于3(4和5)的行,我想将第2列移动+0.1

然而,我的代码似乎将所有值移动+0.1。以下是我到目前为止的情况:

import matplotlib.pyplot as plt
import numpy as np

with open('file1.txt') as data, open('file2.txt') as stds:

    lines1 = data.readlines()
    lines2 = stds.readlines()

    x1a = []
    x2a = []
    x1b = []
    x2b = []
    x1c = []
    x2c = []
    y1a = []
    y2a = []
    y1b = []
    y2b = []
    y1c = []
    y2c = []

    for line1 in lines1:
        p = line1.split()
        if p[2] < 2:        
            x1a.append(float(p[1]))
            y1a.append(float(p[3]))
        elif 1 < p[2] < 4:        
            x1b.append(float(p[1]))
            y1b.append(float(p[3]))
        elif p[2] > 3:        
            x1c.append(float(p[1]))
            y1c.append(float(p[3]))

    for line2 in lines2:
        q = line2.split()
        if q[2] < 2:        
            x2a.append(float(q[1]))
            y2a.append(float(q[3]))
        elif 1 < q[2] < 4:        
            x2b.append(float(q[1]))
            y2b.append(float(q[3]))
        elif q[2] > 3:        
            x2c.append(float(q[1]))
            y2c.append(float(q[3]))

    x1a = np.array(x1a)
    x2a = np.array(x2a)
    x1b = np.array(x1b)
    x2b = np.array(x2b)
    x1c = np.array(x1c)
    x2c = np.array(x2c)
    y1a = np.array(y1a)
    y2a = np.array(y2a)
    y1b = np.array(y1b)
    y2b = np.array(y2b)
    y1c = np.array(y1c)
    y2c = np.array(y2c)

minorLocator = AutoMinorLocator(5)

fig, ax = plt.subplots(figsize=(8, 8))
fig.subplots_adjust(left=0.11, right=0.95, top=0.94)

plt.plot(x1a-0.1,y1a,'b^',mec='blue',label=r'B0',ms=8)
plt.plot(x2a-0.1,y2a,'r^',mec='red',fillstyle='none',mew=0.8,ms=8)
plt.plot(x1b,y1b,'bo',mec='blue',label=r'B0',ms=8)
plt.plot(x2b,y2b,'ro',mec='red',fillstyle='none',mew=0.8,ms=8)
plt.plot(x1c+0.1,y1c,'bx',mec='blue',label=r'B0',ms=8)
plt.plot(x2c+0.1,y2c,'rx',mec='red',fillstyle='none',mew=0.8,ms=8)

plt.axis([-1.0, 3.0, 0., 4])
ax.xaxis.set_tick_params(labeltop='on')
ax.yaxis.set_minor_locator(minorLocator)

plt.show()
导入matplotlib.pyplot作为plt
将numpy作为np导入
以open('file1.txt')作为数据,open('file2.txt')作为STD:
lines1=数据。readlines()
lines2=stds.readlines()
x1a=[]
x2a=[]
x1b=[]
x2b=[]
x1c=[]
x2c=[]
y1a=[]
y2a=[]
y1b=[]
y2b=[]
y1c=[]
y2c=[]
对于第1行中的第1行:
p=line1.split()
如果p[2]<2:
追加(float(p[1]))
y1a.追加(浮点(p[3]))
elif 13:
x1c.append(float(p[1]))
y1c.追加(浮点(p[3]))
对于第2行中的第2行:
q=line2.split()
如果q[2]<2:
追加(float(q[1]))
y2a.append(float(q[3]))
elif 13:
x2c.append(float(q[1]))
y2c.append(float(q[3]))
x1a=np.数组(x1a)
x2a=np.数组(x2a)
x1b=np.数组(x1b)
x2b=np.数组(x2b)
x1c=np.数组(x1c)
x2c=np.数组(x2c)
y1a=np.数组(y1a)
y2a=np.数组(y2a)
y1b=np.数组(y1b)
y2b=np.阵列(y2b)
y1c=np.数组(y1c)
y2c=np.阵列(y2c)
最小定位器=自动最小定位器(5)
图,ax=plt.子批次(图尺寸=(8,8))
图子批次调整(左=0.11,右=0.95,顶=0.94)
plt.绘图(x1a-0.1,y1a,'b^',mec='blue',label=r'B0',ms=8)
plt.绘图(x2a-0.1,y2a,'r^',mec='red',fillstyle='none',mew=0.8,ms=8)
plt.图(x1b,y1b,'bo',mec='blue',label=r'B0',ms=8)
plt.绘图(x2b,y2b,'ro',mec='red',fillstyle='none',mew=0.8,ms=8)
plt.图(x1c+0.1,y1c,'bx',mec='blue',label=r'B0',ms=8)
plt.图(x2c+0.1,y2c,'rx',mec='red',fillstyle='none',mew=0.8,ms=8)
plt.轴([-1.0,3.0,0,4])
ax.xaxis.set_tick_参数(labeltop='on')
ax.yaxis.set\u minor\u定位器(minorLocator)
plt.show()
图为:

我很确定问题出在我的“如果”。我希望您能为我扫清道路和/或为我展示一个更好的选择。

当您进行查询时(
如果
),您必须确保转换在问题之前进行,因此:

   for line1 in lines1:
        p = line1.split()
        if p[2] < 2:        
            x1a.append(float(p[1]))
            y1a.append(float(p[3]))
        elif 1 < p[2] < 4:        
            x1b.append(float(p[1]))
            y1b.append(float(p[3]))
        elif p[2] > 3:        
            x1c.append(float(p[1]))
            y1c.append(float(p[3]))
对于第1行中的第1行:
p=line1.split()
如果p[2]<2:
追加(float(p[1]))
y1a.追加(浮点(p[3]))
elif 13:
x1c.append(float(p[1]))
y1c.追加(浮点(p[3]))
,实际上应该是:

for line1 in lines1:
    p = line1.split()
    if float(p[2]) < 2:     # changed here   
        x1a.append(float(p[1]))
        y1a.append(float(p[3]))
    elif 1 < float(p[2]) < 4:  # There seems to be a problem with this if      
        x1b.append(float(p[1]))
        y1b.append(float(p[3]))
    elif float(p[2]) > 3:     # changed here    
        x1c.append(float(p[1]))
        y1c.append(float(p[3]))
对于第1行中的第1行:
p=line1.split()
如果float(p[2])<2:#在此处更改
追加(float(p[1]))
y1a.追加(浮点(p[3]))
elif 13:#此处更改
x1c.append(float(p[1]))
y1c.追加(浮点(p[3]))
您的
q
变量也是如此。还请注意,询问
1
将使用
x>3
x<2
进行拦截。您还应该纠正这一点。

当您进行查询时(
如果
),您必须确保转换发生在问题之前,因此:

   for line1 in lines1:
        p = line1.split()
        if p[2] < 2:        
            x1a.append(float(p[1]))
            y1a.append(float(p[3]))
        elif 1 < p[2] < 4:        
            x1b.append(float(p[1]))
            y1b.append(float(p[3]))
        elif p[2] > 3:        
            x1c.append(float(p[1]))
            y1c.append(float(p[3]))
对于第1行中的第1行:
p=line1.split()
如果p[2]<2:
追加(float(p[1]))
y1a.追加(浮点(p[3]))
elif 13:
x1c.append(float(p[1]))
y1c.追加(浮点(p[3]))
,实际上应该是:

for line1 in lines1:
    p = line1.split()
    if float(p[2]) < 2:     # changed here   
        x1a.append(float(p[1]))
        y1a.append(float(p[3]))
    elif 1 < float(p[2]) < 4:  # There seems to be a problem with this if      
        x1b.append(float(p[1]))
        y1b.append(float(p[3]))
    elif float(p[2]) > 3:     # changed here    
        x1c.append(float(p[1]))
        y1c.append(float(p[3]))
对于第1行中的第1行:
p=line1.split()
如果float(p[2])<2:#在此处更改
追加(float(p[1]))
y1a.追加(浮点(p[3]))
elif 13:#此处更改
x1c.append(float(p[1]))
y1c.追加(浮点(p[3]))

您的
q
变量也是如此。还请注意,询问
1
将使用
x>3
x<2
进行拦截。您还应该更正此问题。

是!这就成功了。我使用了
float(p[2])
2 Yes!这就成功了。我使用了
float(p[2])
2