gpt4 book ai didi

python matplotlib堆叠条形图分组在一起

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:26 31 4
gpt4 key购买 nike

数据说明:我正在测试一个程序,该程序由 3 个部分组成,这三个部分增加了整个程序的功能,例如第 1 部分适用于 60% 的数据,第 2 部分适用于另外 10% 的数据,第 3 部分适用于另外 6% 的数据。

我想要做的是堆叠条形图,显示“程序处理的数据总量中,绿色表示第 1 部分处理的数据量,红色第 2 部分表示处理的数据量,黄色表示第 3 部分处理的数据量”。

由于我已经在 3 组 5 个文件上测试了该程序,我希望图表通过将每个数据集中的 5 个条形图分组在一起来反射(reflect)这一点,因此最终图表有 3 个部分,彼此相距一英寸然后每个条形图都有上面所说的堆叠效果。

我的目标是 Y 轴是文件工作的百分比,Y 轴是文件所属组的名称。

对于一些示例数据,这是我一直在尝试的:

meta_part1 = [5, 5.5, 4.67, 6.54, 4.4]
meta_part2 = [3.1, 3.3, 3.9, 3.5, 3.1]
meta_part3 = [1.3,1.4,1.7,2.4,0.89]

trans_part1 = [90,89.5,94.67,96.54,94.4]
trans_part2 = [11.1,11.3,10.9,11.5,12.1]
trans_part3 = [11.3,11.4,11.7,12.4,10.89]

s_part1 = [55,55.5,54.67,56.54,54.4]
s_part2 = [11.1,11.3,10.9,11.5,12.1]
s_part3 = [11.3,11.4,11.7,12.4,10.89]

meta、trans 和 s 都是组。

到目前为止我失败的代码在这里:

import matplotlib.pyplot as plt
import numpy as np
import numpy as np
from numpy.random import randn
import pandas as pd
from scipy import stats
import matplotlib as mpl
import seaborn as sns


meta_part1 = [5, 5.5, 4.67, 6.54, 4.4]
meta_part2 = [3.1, 3.3, 3.9, 3.5, 3.1]
meta_part3 = [1.3,1.4,1.7,2.4,0.89]

trans_part1 = [90,89.5,94.67,96.54,94.4]
trans_part2 = [11.1,11.3,10.9,11.5,12.1]
trans_part3 = [11.3,11.4,11.7,12.4,10.89]

s_part1 = [55,55.5,54.67,56.54,54.4]
s_part2 = [11.1,11.3,10.9,11.5,12.1]
s_part3 = [11.3,11.4,11.7,12.4,10.89]

N = 5

ind = np.arange(N) # the x locations for the groups
width = 0.35 # the width of the bars: can also be len(x) sequence

p1 = plt.bar(ind, meta_part1, width, color='y', bottom=meta_part2)
p2 = plt.bar(ind, meta_part2, width, color='r', bottom=meta_part3)
p3 = plt.bar(ind, meta_part3, width, color='g')



plt.ylabel('Scores')
plt.title('Difference between stitchers')
plt.xticks(ind+width/3., ('Test1', 'Test2', 'Test3', 'Test4', 'Test5') )
plt.yticks(np.arange(0,10,1))
plt.legend( (p1[0], p2[0], p3[0]), ('Part1', 'Part2', 'Part3') )
ax.autoscale(tight=True)

plt.show()

但是,到目前为止,这没有用,因为它只生成具有 2 个堆叠部分的条形,而第三个部分正在合并到第一个部分中,我还没有弄清楚如何将合并合并到此代码中。

最佳答案

您没有在此处的代码片段中定义 meta_secondmeta_total,因此很难猜测发生了什么,但我会尝试一下。您可以使用 + 添加列表来获取 meta_total,这将附加两个列表,而不是将值添加在一起。

以下是有效的修改:

meta_second = meta_part1
meta_total = [meta_part1[i]+val for i, val in enumerate(meta_part2)]
p1 = plt.bar(ind, meta_part1, width, color='y')
p2 = plt.bar(ind, meta_part2, width, color='r', bottom=meta_second)
p3 = plt.bar(ind, meta_part3, width, color='g', bottom=meta_total)

另外,不相关,但您尝试在定义之前使用 ax 。您应该尝试坚持使用一种接口(interface)或另一种接口(interface)(pyplot 或面向对象的接口(interface))。他们不喜欢混在一起。就我个人而言,OO 接口(interface)更加健壮和可靠,我一直使用它。

关于python matplotlib堆叠条形图分组在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25669628/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com