如何在matplotlib中的堆积条形图中交替颜色?

时间:2010-08-05 14:34:26

标签: python matplotlib bar-chart

我想在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 个答案:

答案 0 :(得分: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)