Python Boxplot colormapping - PullRequest
       13

Python Boxplot colormapping

0 голосов
/ 17 декабря 2018

У меня есть дата почасовых данных за 3 года.Я составил ежемесячную коробку с почасовыми данными за все 3 года вместе взятых.Теперь я хотел бы раскрасить каждую клетку в соответствии с номером в списке RSM.Каждый месяц имеет определенный номер в списке RSM, который я хотел бы изменить с зеленого (минимальное число в списке RSM) на оранжевый (максимальное число в списке RSM).Вот мой код:

RSM = [0.23, 0.26, 0.29, 0.42, 0.4, 0.39, 0.29, 0.29, 0.30, 0.31, 0.35, 0.30]
ax2 = df.boxplot(column=['PEF-MFE'], by='month', showfliers=False, patch_artist=True)
ax2.set_title('') 

Monthly boxplot

1 Ответ

0 голосов
/ 17 декабря 2018

Вы можете поместить вес в значения RGB для цветов.Boxplot может получить кортеж RGB с 3 числами с плавающей запятой, варьирующимися от 0,0 до 1,0.

Чем выше значение в RSM, тем ближе к 1,0 его зеленый компонент.

Оранжевый - это что-то среднее между (255/255, 130/255, 0) и (255/255, 170 /255, 0).В приведенном выше коде вы можете установить "orangeness", который вам нравится.

Вот пример:



    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.patches import PathPatch

    RSM = [0.23, 0.26, 0.29, 0.42, 0.4, 0.39, 0.29, 0.29, 0.30, 0.31, 0.35, 0.30]
    up = max(RSM)
    down = min(RSM)

    df = pd.read_csv('teste.csv', sep=';')

    greeness = [(RSM[i]-down)/up for i in range(len(RSM))]
    lowest_orange = 0.2 # the higher this value more close to green is the lowest value

    m =['Jan','Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

    bp_dict = df.boxplot(column=['PEF-MFE'],
        by="month",layout=(4,1),figsize=(6,8),
        return_type='both',
        patch_artist = True,
    )

    colors = [(1-(greeness[i] + lowest_orange),(RSM[i])/up,0) for i in range(len(RSM))]
    for row_key, (ax,row) in bp_dict.iteritems():
        ax.set_xlabel('')
        for i,box in enumerate(row['boxes']):
            box.set_facecolor(colors[i])
        ax.set_xticklabels(m)

    plt.show()

И результат:

Результат

...