Почему элементы легенды matplotlib имеют одинаковый цвет? - PullRequest
1 голос
/ 15 апреля 2019

Я делаю гистограмму и добавляю легенды. Код следующий:

import numpy as np
import matplotlib.pyplot as plt
rectArr = list()
fig, ax_arr = plt.subplots(nrows=2, ncols=1, figsize=(8,8), constrained_layout=True)
fig.suptitle("MicCheck")
v = [0,1,2]
v1 = [1,2,3]
rectArr.append(v)
rectArr.append(v1)
rects = tuple()
ax = ax_arr[0]
ind = np.arange(len(v))
colors = ["seagreen", "red", "b", "g", "y"]
ii = 0
print(colors[ii%len(colors)])
rect = ax.bar(ind+ii*0.8, rectArr[ii], 0.18, color=tuple([colors[ii%len(colors)]],), zorder=3)
rects += tuple(rect,)
ii=1
rect = ax.bar(ind+ii*0.8, rectArr[ii], 0.18, color=(colors[ii%len(colors)]), zorder=3)
rects += tuple(rect,)
legends = ("a", "b",)
ax.legend(rects, legends, loc='upper center', bbox_to_anchor=(0.5, -0.08), ncol=3 )
plt.show()

Проблема, которую я получаю, состоит в том, что элементы легенды имеют тот же цвет, что и на изображении ниже: почему это так?

enter image description here

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Чтобы получить оба цвета, вам просто нужно изменить способ написания легенды

, например

ax.plot(x, v, label='a = red')  #plot one array 
ax.plot(x, v1, label='b =green') #plot 2nd array

#ax.legend()..
plt.show()

См. Мой другой аналогичный ответ для дополнительных примеров.

Надеюсь, это поможет

0 голосов
/ 15 апреля 2019
import numpy as np
import matplotlib.pyplot as plt
rectArr = list()
fig, ax_arr = plt.subplots(nrows=2, ncols=1, figsize=(8,8), constrained_layout=True)
fig.suptitle("MicCheck")
v = [0,1,2]
v1 = [1,2,3]
rectArr.append(v)
rectArr.append(v1)
rects = tuple()
ax = ax_arr[0]
ind = np.arange(len(v))
colors = ["seagreen", "red", "b", "g", "y"]
ii = 0
legends = ("a", "b",)

print(colors[ii%len(colors)])
rect = ax.bar(ind+ii*0.8, rectArr[ii], 0.18, color=tuple([colors[ii%len(colors)]],), zorder=3, label=legends[0])
rects += tuple(rect,)
ii=1
rect = ax.bar(ind+ii*0.8, rectArr[ii], 0.18, color=(colors[ii%len(colors)]), zorder=3, label=legends[1])
rects += tuple(rect,)
patches, labels = ax.get_legend_handles_labels()
#ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.08), ncol=3 )
ax.legend(patches, legends, loc='upper center' )
plt.show()
...