2016-08-01 63 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和9.9E之间+ 3 + 3,我需要5.5E + 3和6e之间只使用数据+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]) 

感谢您的帮助解决。