Цвет линии Matplotlib на основе внешней переменной [duplicate]

Theres отличный учебник по этому вопросу в HelloAndroid по этому самому вопросу. Infact это был первый хит, который я получил в Google. Вы должны попробовать googling, прежде чем спрашивать здесь, поскольку это хорошая практика.

0
задан bandito40 12 February 2016 в 23:06
поделиться

3 ответа

Я не думаю, что вы можете использовать массив цветов в plot (в документации говорится, что цвет может быть любым цветом matlab, в то время как scatter docs говорят, что вы можете использовать массив).

Однако вы можете подделать его, построив каждую строку отдельно:

import numpy
from matplotlib import pyplot as plt

x = range(10)
y = numpy.random.choice(10,10)
for x1, x2, y1,y2 in zip(x, x[1:], y, y[1:]):
    if y1 > y2:
        plt.plot([x1, x2], [y1, y2], 'r')
    elif y1 < y2:
        plt.plot([x1, x2], [y1, y2], 'g')
    else:
        plt.plot([x1, x2], [y1, y2], 'b')

plt.show()

2
ответ дан Julien Spronck 16 August 2018 в 11:14
поделиться
  • 1
    лол. Это будет моей следующей попыткой. Спасибо за ответ! – bandito40 12 February 2016 в 23:36
  • 2
    На самом деле это можно сделать с помощью LineCollection, но я не понимаю, как его адаптировать к моим потребностям. – bandito40 13 February 2016 в 01:59

OK. Поэтому я понял, как это сделать, используя LineCollecion, чтобы нарисовать линию на оси.

import numpy as np
import pylab as pl
from matplotlib import collections  as mc

segments = []
colors = np.zeros(shape=(10,4))
x = range(10)
y = np.random.choice(10,10)
i = 0

for x1, x2, y1,y2 in zip(x, x[1:], y, y[1:]):
    if y1 > y2:
        colors[i] = tuple([1,0,0,1])
    elif y1 < y2:
        colors[i] = tuple([0,1,0,1])
    else:
        colors[i] = tuple([0,0,1,1])
    segments.append([(x1, y1), (x2, y2)])
    i += 1     

lc = mc.LineCollection(segments, colors=colors, linewidths=2)
fig, ax = pl.subplots()
ax.add_collection(lc)
ax.autoscale()
ax.margins(0.1)
pl.show()

2
ответ дан bandito40 16 August 2018 в 11:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: