我正在使用python绘制数据图形,并希望了解振幅在一天中如何变化。我有一个适合文件,其中包含我要绘制的数据,看起来像这样:
[ 0 1 2 ... 86397 86398 86399]
这是时间,以秒为单位。
[ -28.3 -27.84 -29.88 ... 0.18 -0.92 -0.28]
这是一个以dB为单位的振幅
我编写了一个python代码,其中时间从几秒更改为格式'%H:%M:%S',并且数据的幅度也是如此,例如:
# -*- coding: utf-8 -*-
#!/usr/bin/env python
from astropy.io import fits
import matplotlib.pyplot as plt
import pylab
import os, sys
import numpy as np
import datetime
from datetime import timedelta
import time
import matplotlib
from datetime import datetime
#Dimensiones de la figura a graficar
fig_size = [18, 20]
plt.rcParams['figure.figsize'] = fig_size
data_vlf = fits.open('PLO-20171018.fits')
t = pylab.transpose(data_vlf[0].data)[0]
time_vlf = t.astype(int)
time_format = [str(timedelta(seconds=s)) for s in time_vlf]
t_format = '%H:%M:%S'
date_vlf = [datetime.strptime(i, t_format).time() for i in time_format]
ch = pylab.transpose(data_vlf[0].data)[6]
pylab.plot(date_vlf, ch, color='black')
plt.legend(['Channel 6'])
plt.xlabel('Time UT')
plt.ylabel('Amplitude')
plt.show()
但是我也想看看振幅在一天中的每个小时如何变化,所以我编写了这段代码,但是它并没有按照我希望的那样工作。
h_i = 0
h_i_2 = 3600
h_f = 21600
for i in range(1, 7):
for num1 in range(h_i, h_f, 3600):
for num2 in range(h_i_2, h_f+1, 3600):
t_1 = date_vlf[num1:num2]
ch_1 = ch[num1:num2]
plt.subplot(3, 2, i)
pylab.plot(t_1, ch_1)
plt.xlabel('1 hour (UT)')
plt.ylabel('Amplitude')
plt.show()
但是我做错了。 我是python的新手。 我将不胜感激。
感谢前进。
答案 0 :(得分:0)
尝试一下。基本上创建6个轴,每个轴对应于子图。我认为出问题了,您只在循环结束时显示了一个图
h_i = 0
h_i_2 = 3600
h_f = 21600
import matplotlib.pyplot as plt
fig, axes = plt.subplots(3,2) # I added this
for i, ax in zip(range(1, 7), axes.ravel()):
for num1 in range(h_i, h_f, 3600):
for num2 in range(h_i_2, h_f+1, 3600):
t_1 = date_vlf[num1:num2]
ch_1 = ch[num1:num2]
ax.plot(t_1, ch_1) # removed a line and changed to this
ax.set_xlabel('1 hour (UT)')
ax.set_ylabel('Amplitude')
plt.show()