2016-08-01 7 views
-1

Я создал график в python, но теперь мне нужно взять раздел графика и развернуть его, используя небольшой диапазон исходных данных, но я не знаю, как найти номер строки результаты, которые формируют диапазон или как я могу создать граф, используя только эти результаты, образуют файл. Это код, у меня есть для графа:Нарезка графика

import numpy as np 
import matplotlib.pyplot as plt 

#variable for data to plot 
spec_to_plot = "SN2012fr_20121129.42_wifes_BR.dat" 

#tells python where to look for the file 
spec_directory = '/home/fh1u16/Documents/spectra/' 
data = np.loadtxt(spec_directory + spec_to_plot, dtype=np.float) 

x = data[:,0] 
y = data[:,1] 

plt.plot(x, y) 
plt.xlabel("Wavelength") 
plt.ylabel("Flux") 
plt.title(spec_to_plot) 
plt.show() 

редактировать: данные между 3.5e + 3 и 9.9e + 3 в первой колонке, мне нужно использовать только данные между 5.5e + 3 и 6е +3 для построения другого графика, но это относится только к первому столбцу. Надеюсь, это немного лучше? Python версии 2.7

+0

Это неясно, но я уверен, что щелкнув значок лупы в вашем графическом окне, выбирая часть, которую вы хотите, сделаете именно то, что вам нужно. – Julien

+0

Что неясно? Как я могу сделать это более ясным? –

+0

Мы не можем знать, какой фрагмент относится к вам, если вы не объясните свою проблему ... – Julien

ответ

0

Если я вас правильно понял, вы могли бы сделать это следующим образом:

my_slice = slice(np.argwhere(x>5.5e3)[0], np.argwhere(x>6e3)[0]) 
x = data[my_slice,0] 
y = data[my_slice,1] 

np.argwhere(x>5.5e3)[0] является индекс первого вхождения x>5.5e3 и как мудр для конца среза. (Предполагая, что ваши данные сортируются)

Более общий способ работает, даже если ваши данные не сортируется:

mask = (x>5.5e3) & (x<6e3) 
x = data[mask, 0] 
y = data[mask, 1] 
+0

Просто попробовал это, и появилась ошибка «x и y должны иметь такое же первое измерение»? –

+0

вам нужно применить одну и ту же нарезку к 'y', см. Мое редактирование. – Julien

+0

не помещайте такой код в комментарии, он не читается, предпочитайте редактировать свой пост ... Не используйте 'и', но' & ', они имеют разное значение. – Julien

0

решена с помощью

plt.axis([5500, 6000, 0, 8e-15]) 

спасибо за помощь.

Смежные вопросы