Как сделать градиент цвета по вертикали, снизу вверх в matplotlib - PullRequest
2 голосов
/ 25 марта 2019

Я успешно отобразил свои данные на matplotlib с градиентными цветами, но в matplotlib градиент цвета отображается горизонтально, как сделать градиент видимым по вертикали?

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
c = np.arange(1,200)
x = np.arange(1,200)
y = np.random.randint(low=1, high=100, size=200)

cm = plt.get_cmap('jet')

fig = plt.figure(figsize=(10,5))
ax1 = plt.subplot(111)

no_points = len(c)
ax1.set_color_cycle([cm(1.*i/(no_points-1)) for i in range(no_points-1)])

for i in range(no_points-1):
    bar = ax1.plot(x[i:i+2],y[i:i+2])
plt.show()

Результат следующий:

result

Вместо этого я хотел бы иметь вертикальный градиент цвета.

1 Ответ

1 голос
/ 26 марта 2019

Я немного изменил ваш код, но в основном просто слил его с рецептом matplotlib , на который ссылался комментатор.Это работает для меня:

import numpy as np
import matplotlib.pyplot as plt

x_ = np.linspace(1, 200, 200)
y_ = np.random.randint(low=1, high=100, size=200)

# You need to interpolate because your line segments are short.
x = np.linspace(1, 200, 4000)
y = np.interp(x, x_, y_)

# Now follow the maplotlib recipe.
points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)

fig, ax = plt.subplots(figsize=(15, 5))

norm = plt.Normalize(y.min(), y.max())
lc = LineCollection(segments, cmap='viridis', norm=norm)

lc.set_array(y)
lc.set_linewidth(2)
line = ax.add_collection(lc)
plt.colorbar(line, ax=ax)

ax.set_xlim(x.min(), x.max())
ax.set_ylim(-10, 110)

plt.show()

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...