Как отобразить область ниже оси x другим цветом в python?

#python #pandas #matplotlib #time-series

#python #pandas #matplotlib #временные ряды

Вопрос:

Я строю временные ряды на python, и для лучшей визуализации я хочу отобразить область ниже оси другим цветом. Ниже приведен код, который я использую.

 import matplotlib.pyplot as plt
plt.plot(list2,spi1,color = 'black')
plt.ylabel('Standardized precipitation index')
plt.xlabel('Time (years)')
plt.show()
  

Пожалуйста, помогите мне сделать это правильно.
Вот график-
введите описание изображения здесь

Комментарии:

1. Что вы подразумеваете под «областью ниже оси»? Вы хотите отобразить значения ниже нуля как красные?

2. Да, я хочу, чтобы отрицательные значения отображались другим цветом, но не в виде точечных графиков. Если в этом ряду есть отрицательное значение, линейный график с использованием входящих и исходящих линий из этой точки создает область ниже оси x. Я хочу, чтобы эта область была другого цвета, а положительная область была другого цвета. Спасибо

3. Есть пример, показывающий, как раскрасить линию на основе другой переменной: matplotlib.org/gallery/lines_bars_and_markers /…

Ответ №1:

Я решил проблему с библиотекой plt.fill_between. Ниже приведен код и правильный график. Спасибо всем за быстрые ответы и любезную помощь.

 y1positive=np.array(spi1)>=0
y1negative = np.array(spi1)<=0
plt.fill_between(list2,spi1,y2=0,where=y1positive,
color='green',alpha=0.5,interpolate=False)
plt.fill_between(list2,spi1,y2=0,where=y1negative,
color='red',alpha=0.5,interpolate=False)
  

введите описание изображения здесь

Комментарии:

1. Спасибо. Это было именно то, что я хотел отобразить

Ответ №2:

Если вам просто нужно изображение графика и вам не нужна логика, у меня очень плохая идея.

введите описание изображения здесь

 import numpy as np
import matplotlib.pyplot as plt

y = np.random.rand(30)

fig, (ax1, ax2) = plt.subplots(2, 1)
sca(ax1)
ax1.plot(y, color='k')
ax1.set(ylim=(.5, 1))
ax1.spines['bottom'].set_visible(False)

ax2.plot(y, color='r')
ax2.set(ylim=(0, .5))
ax2.spines['top'].set_visible(False)
fig.subplots_adjust(hspace=0)
plt.show()
  

Комментарии:

1. Большое вам спасибо!