matplotlib 如何单独指定堆叠条形图中条形的颜色?

bihw5rsg  于 2023-11-22  发布在  其他
关注(0)|答案(2)|浏览(112)

我正在做一个“类预测误差”图,其中一个模型试图将数据分类为两个类中的一个,图中显示了每个类由正确的类和另一个类组成的比例。
因此,对于信号和背景的类别,在那些被归类为信号的数据中,大多数是正确的,但有些数据实际上是背景,在那些被归类为背景的数据中,大多数是正确的,但有些数据实际上是信号。现在,这意味着我想绘制一个信号条,并让信号(红色)构成大部分条,背景(蓝色)构成小部分条,我想绘制另一个背景条,背景(蓝色)构成大部分条,信号(红色)构成小部分条。
我有下面的代码,但是第二个条(背景)中的颜色顺序需要交换。这可能是怎么做的?(我也在考虑拥有两个以上类的可能性。)

import matplotlib
import matplotlib.pyplot as plt

%matplotlib inline
plt.rcParams["figure.figsize"] = [10, 10]

cc0 = 39695 # classified correctly background
ci0 = 18595 # classified incorrectly background
cc1 = 38801 # classified correctly signal
ci1 = 19556 # classified incorrectly signal

fractions_correct   = (cc0, cc1)
fractions_incorrect = (ci0, ci1)
width = 0.9
ind   = np.arange(2)
p1    = plt.bar(ind, fractions_correct, width, color='red')
p2    = plt.bar(ind, fractions_incorrect, width, bottom=fractions_correct, color='blue')

plt.xlabel('classification by model')
plt.ylabel('class case abundances')
plt.xticks(ind, ('signal', 'background'))
plt.yticks([])
plt.legend((p2[0], p1[0]), ('background', 'signal'), loc='center left', bbox_to_anchor=(1, 0.5));
plt.show()

字符串

mkshixfv

mkshixfv1#

如果列表的长度与条数匹配,则可以将颜色参数列表传递给该列表。

color=["red","blue"]
    p1    = plt.bar(ind, fractions_correct, width, color=color)
    color=["blue","red"]
    p2 = plt.bar(ind, fractions_incorrect, width, bottom=fractions_correct, color=color)

字符串

tyky79it

tyky79it2#

最快的解决方案是添加要Map到图的颜色列表:

p1    = plt.bar(ind, fractions_correct, width, color=['red','blue'])
p2    = plt.bar(ind, fractions_incorrect, width, bottom=fractions_correct, color=['blue','red'])

字符串

  • 一个更全面的方法是改变你的绘图方法,我现在还不会进入,因为我不知道你试图解决的问题的规模。

相关问题