Как чередовать цвета в гистограмме с накоплением в matplotlib?

1

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

Проблема в том, что она условна. Я предоставляю тип в массиве, но нет способа сделать это на уровне plt.bar(.............)... ну, я думаю.

p1 = plt.bar(self.__ind,
                    self.__a,
                    self.__width, 
                    color='#263F6A')

p2 = plt.bar(self.__ind,
                    self.__b,
                    self.__width, 
                    color='#3F9AC9',
                    bottom = self.__arch)

p3 = plt.bar(self.__ind,
                    self.__c,
                    self.__width, 
                    color='#76787A',
                    bottom = self.__a + self.__b)

self.__ a и self.__ b и self.__ c - все списки данных, которые мне нужно построить на одном рисунке, и у меня есть другой список типов для каждого элемента вышеупомянутых списков выше. Я просто хочу знать, как можно изменить цвета графиков в зависимости от типа, предоставленного списком типов, и в то же время сохранить все столбцы в одном графике.

Теги:
matplotlib
bar-chart

1 ответ

4

Я смущен, когда вы говорите, что self.__a - это список - когда я пытаюсь построить список:

In [19]: plt.bar(1,[1,2,3], 0.1, color='#ffcc00')

Я получаю

AssertionError: incompatible sizes: argument 'height' must be length 1 or scalar

Однако, что вы можете сделать, это построить ваши значения в цикле:

# Setup code here...

indices = [1,2,3,4]
heights = [1.2, 2.2, 3.3, 4.4]
widths = [0.1, 0.1, 0.2, 1]
types = ['spam', 'rabbit', 'spam', 'grail']


for index, height, width, type in zip(indices, heights, widths, types):
    if type == 'spam':
        plt.bar(index, height, width, color='#263F6A')
    elif type == 'rabbit':
        plt.bar(index, height, width, color='#3F9AC9', bottom = self.__arch)
    elif type == 'grail':
        plt.bar(index, height, width, color='#76787a', bottom = 3)
  • 0
    Эй, спасибо ... Я адаптировал это ... Это прекрасно работает :)
  • 2
    Пожалуйста, помните, что вы должны пометить принятые ответы, нажав на флажок слева от ответа - и если вы найдете ответы полезными, вы также должны проголосовать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню