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

Atl*_*las 1 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)
Run Code Online (Sandbox Code Playgroud)

self.__a 和 self.__b 和 self.__c 都是我需要在同一个图中绘制的数据列表,并且对于上面提到的列表中的每个元素,我还有另一个类型列表。我只想知道如何才能根据类型列表提供的类型更改图形的颜色,同时将所有条形保持在一个图中。

Way*_*ner 5

当你说这self.__a是一个列表时,我很困惑——当我尝试绘制一个列表时:

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

我得到

AssertionError: incompatible sizes: argument 'height' must be length 1 or scalar
Run Code Online (Sandbox Code Playgroud)

但是,您可以做的是在循环中绘制您的值:

# 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)
Run Code Online (Sandbox Code Playgroud)

  • 不客气,请记住,您应该通过单击答案左侧的复选标记来标记已接受的答案 - 如果您发现答案有用,您也应该投票。 (3认同)