Построение последовательностей с одинаковой меткой и цветом на питоне - PullRequest
0 голосов
/ 11 июня 2018

У меня есть набор последовательностей для построения графика.Все они должны быть нанесены на одну и ту же диаграмму, но некоторые из них должны иметь одинаковую метку и цвет.

Используя приведенный ниже код, каждая последовательность будет иметь свою собственную метку и цвет.

plt.clf()
for j in range(k)
    plt.plot(lower_graphs[j, :], label=str(alphas_vis[i]))
    plt.plot(upper_graphs[j, :], label=str(alphas_vis[i]))
plt.lengend()
plt.show()

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Нет, сейчас Я понимаю ...: -)

Если у вас есть два фиксированных набора последовательностей (то есть «верхний» и «нижний»), и вы знаете, что одна легендазапись всегда представляет по одному в каждом наборе, вы можете просто пометить один набор и покрасить другой вручную, поэтому ваш код изменится на:

for j in range(k)
    p = plt.plot(lower_graphs[j, :], label=str(alphas_vis[i]))
    plt.plot(upper_graphs[j, :], c=p[0].get_c()))
plt.legend()

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

0 голосов
/ 11 июня 2018

Хорошо, теперь я понимаю.Таким образом, вы хотите, чтобы matplotlib автоматически окрашивал ваши графики, но линии с одинаковой меткой должны иметь общий цвет и запись легенды.Что вы можете сделать, так это перебрать все строки и метки после создания графика.И каждый ярлык, который уже существует, получает один и тот же цвет, в то время как его запись в легенде перекрывается предыдущим подчеркиванием.(Метки с «_» в начале не отображаются в автоматической легенде):

names = ['a', 'b', 'c', 'a', 'c', 'd']    # sample labels
fig = plt.figure()                        # save your figure in a variable for later access
for i in range(5):
    plt.plot([0,1], [i,i], label=names[i])

plt.legend()                              # still wrong legend for comparison purpose

ax = fig.gca()                            # get the current axis

for i, p in enumerate(ax.get_lines()):    # this is the loop to change Labels and colors
    if p.get_label() in names[:i]:    # check for Name already exists
        idx = names.index(p.get_label())       # find ist index
        p.set_c(ax.get_lines()[idx].get_c())   # set color
        p.set_label('_' + p.get_label())       # hide label in auto-legend
plt.legend(loc='center')                              # correct legend

перед циклом:

enter image description here

после цикла:

enter image description here

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