#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. Большое вам спасибо!