Изменить цвет среднего отрезка линии - PullRequest
0 голосов
/ 17 июня 2020

Мне нужно построить линейный график. Я хочу построить все части линейного графика, которые ниже нуля синего цвета, а все части выше красного.

Вот что мне удалось до сих пор:

import numpy as np
import xarray as xr
import matplotlib.pyplot as plt

x = np.linspace(0, 1, 40)
y = np.random.random(len(x))-0.5
da = xr.DataArray(y, dims=('x',), coords={'x':x})

fig = plt.figure(figsize=(12,6))
ax = fig.add_subplot(1, 1, 1)
da.plot(ax=ax, color='red', linewidth=3)
da.where(y<0).plot(ax=ax, color='blue', linewidth=3)
plt.show()

Вот что я получаю с этим скриптом :

Picture of what I get. Only line segments that are completely below zero are blue

Но я хочу, чтобы цвет изменился при пороге 0, как в этом примере (который я изменил, чтобы показать, что Я хочу):

Picture of what I want. All lines below zero are blue

Я просмотрел несколько предложений здесь, например вот здесь: График: все цвета больше, чем разные цвета

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

Есть простой способ сделать это? Или мне нужно вручную разделять отрезки линии, пересекающие порог?

Спасибо

1 Ответ

1 голос
/ 17 июня 2020

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

Вы можете просто интерполировать свои данные так, чтобы это справедливо и для ваших данных.

enter image description here

import numpy as np
import xarray as xr
import matplotlib.pyplot as plt

xx = np.linspace(0, 1, 40)
yy = np.random.random(len(xx))-0.5

x = np.linspace(0, 1, 4000)
y = np.interp(x, xx, yy) # linear piecewise interpolation

da = xr.DataArray(y, dims=('x',), coords={'x':x})
fig = plt.figure(figsize=(12,6))
ax = fig.add_subplot(1, 1, 1)
da.plot(ax=ax, color='red', linewidth=3)
da.where(y<0).plot(ax=ax, color='blue', linewidth=3)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...