我想在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是我需要在同一图中绘制的所有数据列表,并且我有上面列出的每个元素的另一个类型列表。 我只想知道如何根据类型列表提供的类型更改图形的颜色,同时将所有条形图保留在一个图中。
答案 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)