Вы можете поместить вес в значения 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()
И результат:
Результат