Как чередовать цвета в гистограмме с накоплением в matplotlib? - PullRequest
1 голос
/ 05 августа 2010

Я хочу чередовать цвета в гистограмме с накоплением в 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 - это все списки данных, которые мне нужно построить на одном рисунке, и у меня есть другой список типов для каждого элемента из упомянутых выше списков.Я только хочу знать, как я могу изменить цвета графиков в зависимости от типа, указанного в списке типов, и в то же время сохранить все столбцы на одном графике.

1 Ответ

4 голосов
/ 05 августа 2010

Я смущен, когда вы говорите, что 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)
...