【发布时间】:2013-03-15 19:12:42
【问题描述】:
我正在尝试从包含计数率与时间的 .fits 文件中绘制一些数据。 我的目标是在同一个图中过度绘制不同事件的计数率,在三个不同的 x 轴上具有不同的时间。 由于我要绘制的事件是周期性的,因此我对正确时间的识别施加了一个条件,因此我只能从我需要的时间范围中提取计数率。 这是我的努力:
#!/usr/bin/env python
from scipy import *
from numpy import *
from pylab import *
from scipy import optimize
import pyfits, os, re, glob
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.ticker import FuncFormatter
rc('font',**{'family':'serif','serif':['Helvetica']})
rc('ps',usedistiller='xpdf')
rc('text', usetex=True)
#------------------------------------------------------
tmin=56200
tmax=56249
data=pyfits.open('http://heasarc.gsfc.nasa.gov/docs/swift/results/transients/weak/GX304-1.orbit.lc.fits')
time = data[1].data.field(0)/86400. + data[1].header['MJDREFF'] + data[1].header['MJDREFI']
rate = data[1].data.field(1)
error = data[1].data.field(2)
data.close()
cond= ((time > tmin-5) & (time < tmax)) | ((time + 132.5 > tmin) & (time + 132.5 < tmax-10)) | ((time + 265 > tmin) & (time + 265 < tmax-12))
time=time[cond]
rate=rate[cond]
error=error[cond]
fig, ax1 = plt.subplots()
newax2 = ax1.twiny()
newax3 = ax1.twiny()
# Make some room at the bottom
fig.subplots_adjust(bottom=0.30)
newax2.set_frame_on(True)
newax2.patch.set_visible(False)
newax2.xaxis.set_ticks_position('bottom')
newax2.xaxis.set_label_position('bottom')
newax2.spines['bottom'].set_position(('outward', 20))
newax3.set_frame_on(True)
newax3.patch.set_visible(False)
newax3.xaxis.set_ticks_position('bottom')
newax3.xaxis.set_label_position('bottom')
newax3.spines['bottom'].set_position(('outward', 40))
#..plot the current light curve
errorbar(time, rate, error, fmt='r.', capsize=0)
gca().xaxis.set_major_formatter(FormatStrFormatter('%5.1f'))
#..overplot a previous outburst
errorbar(time + 122.5, rate, error, fmt='g.', capsize=0)
errorbar(time + 255, rate, error, fmt='k.', capsize=0)
axis([tmin-10,tmax,-0.00,0.45])
xlabel('Time, MJD')
ylabel("BAT cts/s/cm$^2$")
savefig("sync.eps",orientation='portrait',papertype='a4',format='eps')
os.system('gv sync.eps')
我正在绘制三个事件,所以我需要三个 x 轴;但是,如果可能的话,我也想用相应的颜色在 x 轴上写下相应的时间。底部报告的时间是红色曲线的正确时间,即最近的事件。 请问有什么建议吗? 非常感谢。
【问题讨论】:
-
感谢埃弗特的回复。但是,我也需要“重新定义”x 轴,以显示每个数据系列的正确时间。而且我认为这比仅仅改变轴上的颜色更棘手。无论如何,很快或之后我也会需要那个部分。
-
顺便说一句,您是否有理由不让 matplotlib/pylab 为您显示图形,而是通过 gv 运行它?然后,您可以从 pylab 交互式图形窗口中保存文件。还是 pylab 在您的系统上配置不当导致您无法使用这种交互式方法?
标签: python