matplotlib.animation показывает пустые графики (НЕ из-за блокнота Jupyter или слишком маленьких маркеров) - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь сделать анимацию, но полученные графики отображаются пустыми. Мой код можно найти ниже:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
import matplotlib.animation as animation

class SubplotAnimation(animation.TimedAnimation):
def __init__(self, F_vector, eta_atm, Pkid, Tb_sky):
    fig = plt.figure()
    ax1 = fig.add_subplot(2, 1, 1)
    ax2 = fig.add_subplot(2, 1, 2)

    self.F_vector = F_vector
    self.eta_atm = eta_atm
    self.Pkid = Pkid
    self.Tb_sky = Tb_sky

    self.t = np.linspace(0, 350, 350)

    ax1.set_xlabel('Frequency in GHz')
    ax1.set_ylabel('$\eta$')
    self.line1a = Line2D([], [], color='black', linewidth=3)
    self.line1b = Line2D([], [], color='red', linewidth=3)
    self.line1c = Line2D([], [], color='red', linewidth=3)
    self.line1d = Line2D([], [], color='yellow', linewidth=3)
    ax1.add_line(self.line1a)
    ax1.add_line(self.line1b)
    ax1.add_line(self.line1c)
    ax1.add_line(self.line1d)

    ax2.set_xlabel('$P_{kid}$ in W')
    ax2.set_ylabel('$T_{sky}$ in K')
    self.line2a = Line2D([], [], color='red', linewidth=3)
    self.line2b = Line2D([], [], color='green', linewidth=3)
    self.line2c = Line2D([], [], color='blue', linewidth=3)
    self.line2d = Line2D([], [], color='yellow', linewidth=3)
    ax2.add_line(self.line2a)
    ax2.add_line(self.line2b)
    ax2.add_line(self.line2c)
    ax2.add_line(self.line2d)

    animation.TimedAnimation.__init__(self, fig, interval=50, blit=True)

def _draw_frame(self, framedata):
    i = framedata

    self.line1a.set_data(self.F_vector, self.eta_atm[0, :])
    self.line1b.set_data(self.F_vector, self.eta_atm[1, :])
    self.line1c.set_data(self.F_vector, self.eta_atm[2, :])
    self.line1d.set_data(self.F_vector, self.eta_atm[3, :])

    self.line2a.set_data(self.Pkid[0, i, :], self.Tb_sky[0, i, :])
    self.line2b.set_data(self.Pkid[1, i, :], self.Tb_sky[1, i, :])
    self.line2c.set_data(self.Pkid[2, i, :], self.Tb_sky[2, i, :])
    self.line2d.set_data(self.Pkid[3, i, :], self.Tb_sky[3, i, :])

    self._drawn_artists = [self.line1a, self.line1b,self.line1c,
                           self.line1d, self.line2a, self.line2b,
                           self.line2c, self.line2d]

def new_frame_seq(self):
    return iter(range(self.t.size))

def _init_draw(self):
    lines = [self.line1a, self.line1b, self.line1c,
             self.line1d, self.line2a, self.line2b,
             self.line2c, self.line2d]
    for l in lines:
        l.set_data([], [])
SubplotAnimation_1 = SubplotAnimation(F_vector, eta_atm, Pkid, Tb_sky)
plt.show()

Где F_vector, eta_atm, Pkid, Tb_sky - это матрицы, которые извлекаются из файлов .txt. Я вижу 2 графика, как я хочу, с метками правой оси. Однако внутри ничего нет. Я запускаю эту программу локально (не на ноутбуке Jupyter) и, как вы можете видеть, увеличение ширины линии не имеет никакого эффекта. Кто-нибудь знает, почему на графике ничего не отображается?

Буду очень признателен за вашу помощь, заранее спасибо!

1 Ответ

0 голосов
/ 16 октября 2019

Виновником моей проблемы была граница осей. Добавление приведенного ниже кода к функции init заставило программу работать:

ax1.set_xlim(np.min(self.F_vector), np.max(self.F_vector))
ax1.set_ylim(np.min(eta_atm), np.max(eta_atm)
ax2.set_xlim(0, np.max(self.Pkid))
ax2.set_ylim(0, np.max(self.Tb_sky))

Сделало это :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...