Как построить последовательные времена дня, используя подзаговоры в Python - PullRequest
0 голосов
/ 20 июня 2019

Я рисую данные с помощью Python и хочу посмотреть, как меняются амплитуды в течение дня.У меня есть файл подгонки, который содержит данные, которые я хочу построить, и выглядит так:

[ 0  1  2 ... 86397  86398  86399]

Это время в секундах.

[ -28.3  -27.84 -29.88 ... 0.18  -0.92  -0.28]

Это амплитуда вдБ

Я написал код на 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()

Но я делаю неправильно.Я новичок в питоне.Буду признателен за любую помощь.

Спасибо за продвижение.

1 Ответ

0 голосов
/ 21 июня 2019

Попробуй это. В основном, создайте 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...