Настройка цветов на гистограмме, относящейся к 95% доверительному интервалу - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь установить цвета столбцов в зависимости от того, находится ли данное значение y выше, ниже или в пределах доверительного интервала. Таким образом, если заданное значение y выше верхнего предела шкалы, цвет полосы должен быть темным, ниже темно-синим и постепенно переходить в цвета шкалы цветов. В настоящее время мой код выглядит следующим образом:

import pandas as pd
import numpy as np
%matplotlib notebook
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.cm import ScalarMappable
import matplotlib.colors as mcolors
mpl.get_backend()
np.random.seed(12345)

df = pd.DataFrame([np.random.normal(32000,200000,3650), 
                   np.random.normal(43000,100000,3650), 
                   np.random.normal(43500,140000,3650), 
                   np.random.normal(48000,70000,3650)], 
                  index=[1992,1993,1994,1995])

y = 100000

xlocs = [0, 1, 2, 3]

value = df.mean()
std = df.std()


topbarlimits = value + (2*std)
minbarlimits = value - (2*std)

#Set colors
clist = [(0, "darkslateblue"), (0.09, "mediumblue"), (0.18, "cornflowerblue"), (0.27, "deepskyblue"), 
         (0.36, "lightskyblue"),(0.55, "white"), (0.64, "salmon"), (0.73, "tomato"), (0.82, "indianred"), 
         (0.91, "firebrick"), (1, "darkred")]

color_values = [0, 0.27, 0.55, 1]
color_values = [x / max(color_values) for x in color_values]

cmap = mcolors.LinearSegmentedColormap.from_list("", clist)
CS = plt.contourf([xlocs, color_values],cmap=cmap, levels = np.linspace(0, 1, 12))

plt.axhline(y=y, zorder=0)
plt.bar(range(len(df.columns)), value+np.abs(df.values.min()), bottom=df.values.min(), 
        yerr=2*std, align='center', alpha=0.5, color=cmap(5000),capsize = 10)

cbar = plt.colorbar(CS, cmap=clist)
cbar.set_label('Color', rotation=270,labelpad=25)

plt.xticks(range(len(df.columns)), df.columns)
plt.ylabel('Distribution value')
plt.title('Assignment 3')

for i, v in enumerate(abs(value.astype(int))):
    plt.text(xlocs[i] + 0.2, abs(v) + 0.2, str(v))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...