Python 努皮病

Python 努皮病,python,numpy,astropy,Python,Numpy,Astropy,我有个小问题。我找不到得到我想要的东西的方法。 我有一个数组。我创建变量“Tri_1”以便只获取符合我的条件的行 但是我还想从另一列中获取行,该列考虑了前面的条件,以便在x和y中绘制图形(g0-r0)。因此,只需获取Tri_1工作的列“g0”中的行 Tri_1 = tbdata[((tbdata['g0-r0']) < 0.8) & (-0.4 < (tbdata['g0-r0']))] # Ne garder que les -0.4 < (g-r)0 < 0

我有个小问题。我找不到得到我想要的东西的方法。 我有一个数组。我创建变量“Tri_1”以便只获取符合我的条件的行

但是我还想从另一列中获取行,该列考虑了前面的条件,以便在x和y中绘制图形(g0-r0)。因此,只需获取Tri_1工作的列“g0”中的行

Tri_1 = tbdata[((tbdata['g0-r0']) < 0.8) & (-0.4 < (tbdata['g0-r0']))]  # Ne garder que les -0.4 < (g-r)0 < 0.8

print tbdata[(tbdata['g0'], Tri_1)] 
原因是我想在函数(g0-r0)中绘制g0。但是,如果我提出:

fig2 = plt.figure(2)
plt.plot(Tri_1, tbdata['g0'], '.')
plt.title('Diagramme Couleur-Magnitude étoiles bleues')
plt.xlabel('(g0-r0)')
plt.ylabel('g0')
plt.xlim(-1.5,2.5)
plt.ylim(14,28)
plt.gca().invert_yaxis()
plt.show()
它不起作用,因为x和y的尺寸不同。所以我只想让'g0'对应于'g0-r0'

谢谢大家!

更新:

这是我到目前为止发现的:

#!/usr/bin/python
# coding: utf-8

from astropy.io import fits
from astropy.table import Table
from astropy.table import Column
import numpy as np
import matplotlib.pyplot as plt


    ###################################
    # Importation du fichier de champ #
    ###################################

filename = '/home/valentin/Desktop/Field169_combined_final_roughcal.fits_traite_traiteXY_traiteXY_final'

print 'Fichier en cours de traitement' + str(filename) + '\n'

# Ouverture du fichier à l'aide d'astropy
field = fits.open(filename)        

# Lecture des données fits 
tbdata = field[1].data            


    #######################################
    # Paramètres pour la carte de densité #
    #######################################

# Boite des étoiles bleues :
Blue_stars_X = tbdata[np.bitwise_and(tbdata['g0-r0'] > -0.5, tbdata['g0-r0'] < 0.8 )] # Ne garder que les -0.4 < (g-r)0 < 0.8
Blue_stars_Y = Blue_stars = Blue_stars_X[Blue_stars_X['g0'] < 23.5]

RA_Blue_stars = ?? # get values RA from previous conditions
DEC_Blue_stars = ?? # get values DEC from previous conditions

# Boite des étoiles très bleues :
Very_Blue_stars_X = tbdata[np.bitwise_and(tbdata['g0-r0'] > -0.5, tbdata['g0-r0'] < 0.2 )]
Very_Blue_stars_Y = Very_Blue_stars = Very_Blue_stars_X[Very_Blue_stars_X['g0'] < 23.5]



    #####################################
    # Traçage des différents graphiques #
    #####################################


fig1 = plt.figure(1)
plt.plot(tbdata['g0-r0'], tbdata['g0'], 'r.', label=u'Etoiles du champ')
plt.plot(Blue_stars['g0-r0'], Blue_stars['g0'], 'b.', label =u'Etoiles bleues')
plt.plot(Very_Blue_stars['g0-r0'], Very_Blue_stars['g0'], 'k.', label =u'Etoiles très bleues')
plt.title('Diagramme Couleur-Magnitude')
plt.xlabel('(g0-r0)')
plt.ylabel('g0')
plt.xlim(-1.5,2.5)
plt.ylim(14,28)
plt.legend(loc='upper left')
plt.gca().invert_yaxis()

plt.show()
#fig.savefig('CMD.png')

print "Création du Diagramme"
#/usr/bin/python
#编码:utf-8
从astropy.io导入拟合
从astropy.table导入表
从astropy.table导入列
将numpy作为np导入
将matplotlib.pyplot作为plt导入
###################################
#德尚费希尔酒店#
###################################
filename='/home/valentin/Desktop/Field169_combined_final_roughcal.fits_traite_traiteXY_traiteXY_final'
打印'Fichier en cours de traitement'+str(文件名)+'\n'
#占星术助手
field=fits.open(文件名)
#多涅斯讲座
tbdata=字段[1]。数据
#######################################
#按密度点菜参数#
#######################################
#博伊特·德斯泰尔斯·布卢埃斯:
蓝星X=tbdata[np.按位和(tbdata['g0-r0']>-0.5,tbdata['g0-r0']<0.8)]#Ne garder que les-0.4<(g-r)0<0.8
蓝色星星Y=蓝色星星X[蓝色星星X['g0']<23.5]
蓝星=从以前的条件中获取值RA
十二月蓝星=从以前的条件中获取值
#博伊特·德斯泰尔斯·布卢埃斯:
非常蓝的星星X=tbdata[np.按位的和(tbdata['g0-r0']>-0.5,tbdata['g0-r0']<0.2)]
非常蓝的星星们,非常蓝的星星们,非常蓝的星星们
#####################################
#不同图形之间的差异#
#####################################
图1=plt.图(1)
plt.绘图(tbdata['g0-r0'],tbdata['g0'],'r',标签=u'Etoiles du champ')
plt.绘图(蓝色星['g0-r0'],蓝色星['g0'],'b',标签=u'Etoiles blues')
plt.plot(非常蓝的星星['g0-r0'],非常蓝的星星['g0'],'k',label=u'Etoiles très blues')
plt.title(‘库勒震级图表’)
plt.xlabel(‘(g0-r0)’)
plt.ylabel('g0')
plt.xlim(-1.5,2.5)
plt.ylim(14,28)
plt.图例(位置='左上')
plt.gca().invert_yaxis()
plt.show()
#图savefig('CMD.png')
打印“图表的Création du Diagramme”

如果您只想包含满足条件的元素,可以这样说:

condition = (tbdata['g0-r0']) < 0.8) & (-0.4 < (tbdata['g0-r0'])
或者根据您的情况,您只需更改
绘图
行:

plt.plot(Tri_1['g0-r0'], Tri_1['g0'], '.')
对于您的情况:
你可以考虑用你想要的输入和输出设置一个最小的例子。@ AMI TavoLy我的问题是被编辑^ ^希望的是,更好的是,我一直在研究这个问题到目前为止,我发现了类似的东西!我用我发现的更新了我的问题,但我还有一个小问题我知道我正在搜索的RA和DEC是相似的,但我没有找到确切的请求。不要尝试一下子做所有事情,尝试让一个工作,然后调整它作为第二个输入,检查它是否仍然工作,你的问题代码太多,很难跟踪。使用函数或类,并使代码模块化(使用unittests!),如果您想扩展它,请使用另一个函数,使其与小样本输入一起工作,然后尝试使用真正的大数据。尽管如此,我还是更新了答案。但对于你接下来的问题:尽量让它更小更具体(并问一个新问题作为后续问题),我会考虑你的答案!非常感谢您的支持和更新!我又在写我的剧本了,幸运的是,我发现了和你一样的东西(非常相似,但可能不那么简单)
x_data = tbdata[condition]['g0-r0']
y_data = tbdata[condition]['g0']
plt.plot(x_data, y_data, '.')
plt.plot(Tri_1['g0-r0'], Tri_1['g0'], '.')
# Setup the condition:
condition1 = np.bitwise_and(tbdata['g0-r0'] > -0.5, tbdata['g0-r0'] < 0.8 )
# Combine it with the g0 condition
condition_final = np.bitwise_and(Blue_stars_X['g0'] < 23.5, condition1)
# Get all rows where the condition is true:
Blue_stars = tbdata[condition_final]

RA_Blue_stars = Blue_stars['RA']
DEC_Blue_stars = Blue_stars['DEC']
fig1 = plt.figure(1)
plt.plot(tbdata['g0-r0'], tbdata['g0'], 'r.', label=u'Etoiles du champ')
plt.plot(Blue_stars['g0-r0'], Blue_stars['g0'], 'b.', label =u'Etoiles bleues')
plt.title('Diagramme Couleur-Magnitude')
plt.xlabel('(g0-r0)')
plt.ylabel('g0')
plt.xlim(-1.5,2.5)
plt.ylim(14,28)
plt.legend(loc='upper left')
plt.gca().invert_yaxis()

plt.show()
#fig.savefig('CMD.png')