Уведомления

Группа в Telegram: @pythonsu

#1 Март 1, 2022 01:43:01

Renaldas
Зарегистрирован: 2021-02-02
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Как наиболее правильно работать с графиками в PyCharm?

Мои умения работать с графиками ограничиваются только следующим или похожим кодом. Собираю в список, в который потом на каждой итерации программы добавляю переменную, и откладываю этот все увеличивающийся список (можно ли как-то избежать строки объявления пустого списка profitability_list = вне функции?).
Проблема в том, что в PyCharm, если откладывать так несколько тысяч раз, то постепенно съедаются гигабайты памяти, в окне графика остается каждый файл после каждой итерации (я так понимаю, что справа в окне на каждой итерации добавляющийся новый график просто остается в рабочей памяти). Что я делаю неправильно? Как заставить программу не держать все эти тысячи файлов в памяти, а оставлять только последний?


 def profitability_graph():
    pyplot.clf()
    pyplot.close()
    pyplot.figure(figsize=(12, 12))
    pyplot.xlabel('Time')
    pyplot.ylabel('RVN profitability')
    pyplot.plot(profitability_list, color='k', linewidth=1, label='RVN profitability')
    pyplot.legend()
    pyplot.grid(True)
    pyplot.show()
profitability_list = []
def main():
    difficulty = get_rvn_difficulty()
    rvn_btc_exchange_rate = get_rvn_btc_exchange_rate()
    profitability = calculate_profitability(rvn_btc_exchange_rate, difficulty)
    profitability_list.append(profitability)
    profitability_graph()
    print(profitability)
for iteration in range(1000):
    main()
    time.sleep(60)

Похоже, рано мне за Питон, я даж картинку вставить не умею … https://ibb.co/k9P8BWC

Отредактировано Renaldas (Март 1, 2022 01:46:04)

Офлайн

#2 Март 1, 2022 09:51:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Как наиболее правильно работать с графиками в PyCharm?

Попробуй .close('all')
https://matplotlib.org/2.0.2/api/pyplot_api.html#matplotlib.pyplot.close

Пример

  
import matplotlib.pyplot
 
def f(lst):
    matplotlib.pyplot.plot(lst)
    matplotlib.pyplot.show()
    matplotlib.pyplot.close('all')
 
for i in range(10):
    g = [(i, i) for i in range(i + 2)]
    f(g)

Renaldas
можно ли как-то избежать строки объявления пустого списка profitability_list = вне функции?
В примере я передаю данные для построения графика в функцию через аргумент. Возможно, тебе это поможет. Может быть, это не поможет тебе, потому что цель твоя тоже неточна.

Если болит голова, то её можно мазать снаружи обезбаливающим или зелёнкой. И голова даже может перестать болеть после этого. Но это не значит, что мазать голову зелёнкой или обезбаливающим для купирования головной боли яляется правильной стратегией лечения.

Чтобы вылечить что-то, нужно правильно причину заболевания определить. Только после этого можно назначить лечение. Вот здесь то же самое. Чтобы что-то сделать, нужно сначала правильно задачу поставить. Только после этого можно распланировать решение. И часто задача разбивается на подзадачи, которые разбиваются потом дальше на подзадачи, которые разбиваются потом дальше на подзадачи и так далее. Так если ты на самом верху что-то неправильно определил - неправильно поставил задачу - то оно дальше пойдёт тоже неправильно. Поэтому начинают сначала с цели. Что ты пытаешься сделать точно. Только после этого под эту цель ставят задачу. И потом ты уже с этой задачей работаешь вот этим описанным образом.

Я к тому, что у тебя проблема не в переполнении, а в том, что сначала нужно убедиться, что у тебя график вообще правильно строится, даже если бы там не было никакого переполнения.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version