Заполнение лестницы matplotlib разными цветами

У меня следующая проблема. У меня есть данные, для которых мне нужно построить гистограмму.

Для этой цели я использую numpy.histogram для создания подборок и контента, а затем pyplot.stairs для визуализации.

Все идет нормально.

Следующая часть заключается в том, что я хотел бы, чтобы область гистограммы между левым концом и заданным значением x была заполнена цветом, затем от x до y в другом и, наконец, от y до правого конца в третьем.

Что-то вроде изображения здесь ниже.

Знаете ли вы, как это сделать?

Спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я вижу здесь два варианта.

Один, близкий к вашему коду (ну, на самом деле вы не предоставили никакого кода, поэтому мне пришлось немного догадаться)

# 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, потому что я уже рассчитал интервалы и значения для других целей, поэтому я сэкономлю некоторое время вычислений.

toto 16.06.2024 16:55

Другие вопросы по теме