Почему у меня цикл for для печати и генерации фигур не по порядку? - PullRequest
0 голосов
/ 09 марта 2019

Мой цикл for, представленный здесь, должен генерировать график для каждого года. Предполагается напечатать год, а затем показать цифру. Но происходит то, что сначала печатаются все годы, а затем печатаются все цифры.

Кроме того. В самом конце напечатана пустая фигура.

Я использую Spyder для записи.

Картинки прикреплены, чтобы показать результаты.

Не могли бы вы помочь мне понять, что здесь происходит, чтобы я мог контролировать свои результаты в будущем?

Большое спасибо.

import pandas as pd
import matplotlib.pyplot as plt

plt.figure(0)

for i in range(5):
    k=2014+i
    crimesyear=crimes.loc[crimes['Year'].isin([k])]
    crimesyear.groupby('Month')['INCIDENT_ID'].c**strong text**ount().plot(marker='o')
    plt.figure(i+1)
    plt.xticks(numpy.arange(12),months)
    plt.ylabel('Number of Crimes')
    plt.show
    print(k)

Первая часть вывода

Последняя часть вывода

Ответы [ 2 ]

0 голосов
/ 09 марта 2019

Matplotlib имеет способ генерирования графиков без использования интерфейса с отслеживанием состояния.Это должно помочь вам создавать графики в цикле.

fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(5, 10))

for i, a in enumerate(ax):
    a.plot(np.arange(10))
    a.set_title(f'test {i}')

Ознакомьтесь с объектно-ориентированным API matplotlib здесь

0 голосов
/ 09 марта 2019

Вот упрощенная версия ваших графиков без всех данных.

import pandas as pd
import numpy
import matplotlib.pyplot as plt

for i in range(5):
    k=2014+i
    plt.figure(i)
    plt.title(str(k))
    plt.ylabel('Number of Crimes')
plt.show()

Ваш дополнительный пустой график пришел с plt.figure(0) в начале. Вам нужно только сделать plt.show() один раз в конце. Вы можете установить заголовки, используя plt.title(<string goes here>). В общем, отображение чего-либо - это асинхронный вызов другой программы, поэтому часто трудно предсказать порядок, в котором вы будете видеть вещи - я не знаком со spyder для деталей здесь.

...