如何使用python中的子图绘制一天中的连续时间

时间:2019-06-20 20:49:22

标签: python for-loop matplotlib subplot

我正在使用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的新手。 我将不胜感激。

感谢前进。

1 个答案:

答案 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()