如何使用Python畫圖?

參考資料

準備工作:範例所需檔案下載及說明

  • MAXI_lc_1day-Cyg_X-1.csv 和 MAXI_lc_1orbit-Cyg_X-1.csv (已在files4examples資料夾中無須下載):

    這兩個Cyg X-1光變曲線資料下載自X射線望遠鏡MAXI的官網,分別以1天和90分鐘(1 orbit)取樣。 檔案內容為不同能量區段的光變曲線資料,資料的詳細格式請見MAXI官網的說明

  • 其他範例檔案(待補)

範例:畫出黑洞X-ray 雙星Cygnus X-1的光變曲線


In [1]:
from astropy.io import ascii
import matplotlib.pyplot as plt
%matplotlib notebook
lc = ascii.read('../files4examples/MAXI_lc_1day-Cyg_X-1.csv')
# lc = ascii.read('../files4examples/MAXI_lc_1orbit-Cyg_X-1.csv')
time = lc['col1']
rate_2_20keV = lc['col2']
err_2_20keV = lc['col3']
rate_2_4keV = lc['col4']
err_2_4keV = lc['col5']
rate_4_10keV = lc['col6']
err_4_10keV = lc['col7']
rate_10_20keV = lc['col8']
err_10_20keV = lc['col9']

In [2]:
plt.figure()
plt.plot(time, rate_2_20keV)
plt.xlabel('Time (MJD)', fontsize=15)
plt.ylabel('Count rate', fontsize=15)
plt.title('Cyg X-1 light curve from MAXI (2-20 keV)', fontsize=15)
plt.show()



In [3]:
plt.figure()
plt.plot(time, rate_2_20keV)
plt.hold(True)
plt.plot(time, rate_2_4keV)
plt.plot(time, rate_4_10keV)
plt.plot(time, rate_10_20keV)
plt.hold(False)
plt.legend(('2-20 keV', '2-4 keV', '4-10 keV', '10-20 keV'))
plt.xlabel('Time (MJD)', fontsize=15)
plt.ylabel('Count rate', fontsize=15)
plt.title('Cyg X-1 light curve from MAXI', fontsize=15)
plt.show()



In [4]:
plt.figure()
plt.subplot(411)
plt.errorbar(time, rate_2_20keV, yerr=err_2_20keV, fmt='r')
plt.title('Cyg X-1 light curve from MAXI')
plt.ylabel('2-20 keV')
plt.subplot(412)
plt.errorbar(time, rate_2_4keV, yerr=err_2_4keV, fmt='b')
plt.ylabel('2-4 keV')
plt.subplot(413)
plt.errorbar(time, rate_4_10keV, yerr=err_4_10keV, fmt='k')
plt.ylabel('4-10 keV')
plt.subplot(414)
plt.errorbar(time, rate_10_20keV, yerr=err_10_20keV, fmt='m')
plt.ylabel('10-20 keV')
plt.xlabel('Time (MJD)')
plt.show()
#plt.savefig('MAXI_lc_1day-Cyg_X-1.png')


範例: 畫出整段光變曲線並在其上畫出某區段的放大圖


In [5]:
plt.figure()
plt.plot(time, rate_2_20keV)
plt.xlabel('Time (MJD)', fontsize=15)
plt.ylabel('Count rate', fontsize=15)
plt.title('Cyg X-1 light curve from MAXI (2-20 keV)', fontsize=15)
plt.axes([.68, .68, .2, .2], axisbg='w')
plt.plot(time[1260:1300]-57000, rate_2_20keV[1260:1300], 'r')
plt.xticks([0, 40])
plt.yticks([2, 4])
plt.xlabel('Time (57000 MJD)', fontsize=10)
plt.ylabel('Count rate', fontsize=10)
plt.show()