Как получить несколько окон, содержащих несколько графиков, используя matplotlib?

Ответ

@Oleksiy велик, но не полностью работает для моих требований. В течение сеанса, если наблюдаются несколько null s, все заполняются первым не null для сеанса. Мне понадобилось значение last non null для распространения вперед.

Следующая настройка была использована для моего использования:

def fill_forward(df, id_column, key_column, fill_column):

    # Fill null's with last *non null* value in the window
    ff = df.withColumn(
        'fill_fwd',
        func.last(fill_column, True) # True: fill with last non-null
        .over(
            Window.partitionBy(id_column)
            .orderBy(key_column)
            .rowsBetween(-sys.maxsize, 0))
        )

    # Drop the old column and rename the new column
    ff_out = ff.drop(fill_column).withColumnRenamed('fill_fwd', fill_column)

    return ff_out
3
задан DavidG 15 January 2019 в 15:55
поделиться

1 ответ

Вам просто нужно обернуть существующий код в цикл for для разных фигур, каждая из которых содержит 20 подфигур. Хитрость заключается в том, чтобы затем изменить значения ключей, используя индекс (20*i)+key, чтобы получить все 200 ключей. Для i=0 (первая цифра) вы получите 1, 2, 3, ... 19, 20. Для i=1 (вторая цифра) вы получите 21, 22, 23, ... 39, 40 и и так далее.

Ниже приведена модифицированная версия вашего кода. У меня нет данных, поэтому я не могу их опробовать. Если это не сработает, дайте мне знать. Как указывает @DavidG, plt.show() должно быть вне циклов for.

grouped = dataset.groupby('product_number')
ncols = 4
nrows = int(np.ceil(grouped.ngroups/40))

for i in range(10):
    fig, axes = plt.subplots(figsize=(12,4), nrows = nrows, ncols = ncols)

    for (key, ax) in zip(grouped.groups.keys(), axes.flatten()):
        grouped.get_group((20*i)+key).plot(x='TimeElapsed', y='StepID', ax=ax, sharex = True, sharey = True)
        ax.set_title('product_number=%d'%((20*i)+key))
    ax.legend()
plt.show() # Mind the indentation
0
ответ дан Sheldore 15 January 2019 в 15:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: