У меня следующая проблема. У меня есть данные, для которых мне нужно построить гистограмму.
Для этой цели я использую numpy.histogram для создания подборок и контента, а затем pyplot.stairs для визуализации.
Все идет нормально.
Следующая часть заключается в том, что я хотел бы, чтобы область гистограммы между левым концом и заданным значением x была заполнена цветом, затем от x до y в другом и, наконец, от y до правого конца в третьем.
Что-то вроде изображения здесь ниже.
Знаете ли вы, как это сделать?
Спасибо!






Я вижу здесь два варианта.
Один, близкий к вашему коду (ну, на самом деле вы не предоставили никакого кода, поэтому мне пришлось немного догадаться)
# MRE part
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as sta
data=sta.skewnorm(-0.6,0.25,0.25).rvs(70000)
# Your (probable) code
eff,edges=np.histogram(data, bins=200)
plt.stairs(eff, edges)
plt.show()
# Multi-color version
plt.stairs(eff[:85], edges[:86], fill=True, color='red')
plt.stairs(eff[85:110], edges[85:111], fill=True, color='green')
plt.stairs(eff[110:], edges[110:], fill=True, color='blue')
plt.show()
Другой метод — использовать метод hist matplotlib. И раскрашивает полосы по своему желанию. Например
eff, edges, bars = plt.hist(data, bins=200, color='green')
centres = (edges[1:]+edges[:-1])/2
for i in np.where(centres<0)[0]: bars[i].set_facecolor('red')
for i in np.where(centres>0.25)[0]: bars[i].set_facecolor('blue')
На вашем изображении кажется, что у вас нарисован контур. Конечно, вы всегда можете сделать это, нарисовав plt.stairs(fill=False) в дополнение к любому из этих решений.
Тот же результат, конечно.
Спасибо! Я думаю, что воспользуюсь решением номер 1, потому что я уже рассчитал интервалы и значения для других целей, поэтому я сэкономлю некоторое время вычислений.