在python或excel中100%群集和堆栈图表打印

在python或excel中100%群集和堆栈图表打印,python,excel,matplotlib,Python,Excel,Matplotlib,我想用python或excel绘制图表(目前在excel中完成,但它没有完成我想要实现的任务)。我会解释我现在做了什么, 我想在堆叠和聚类条形图中绘制成分A、B、C、D和E的以下营养数据。下面是数据 在列E之后,显示每种营养素的最大阈值。 我需要的是跟踪。我将举一个例子。考虑原始脂肪< /代码>,我们有5种成分,5种成分的脂肪总量为:代码>92.52+0.06+0.44+0+39.05=132.07</代码>。这是在下图的堆栈图中绘制的。但是,这已超过最大值65。如果65被视为100%,则总脂

我想用python或excel绘制图表(目前在excel中完成,但它没有完成我想要实现的任务)。我会解释我现在做了什么, 我想在堆叠和聚类条形图中绘制成分
A
B
C
D
E
的以下营养数据。下面是数据

在列
E
之后,显示每种营养素的最大阈值。 我需要的是跟踪。我将举一个例子。考虑原始<代码>脂肪< /代码>,我们有5种成分,5种成分的脂肪总量为:代码>92.52+0.06+0.44+0+39.05=132.07</代码>。这是在下图的堆栈图中绘制的。但是,这已超过最大值65。如果65被视为100%,则总脂肪列应显示203.18%,远高于最大值。对于每种营养素,应该有两个堆叠的柱,一个显示参考值,另一个显示当前计算的值

下面是我在excel中得到的。它将两个值都设置为100%,因此无法进行比较。

我用颜料画出我真正想展示的东西。(仅适用于胖条)


有人能用excel或Python帮我解决这个问题吗(我也很熟悉Python,我认为excel做不到这一点)。非常感谢。

首先,我建议将您的数据转换为百分比,并将其转换为一个百分比。按照您的示例,这意味着将标记为“fat”的行作为一个数组,将其除以最大值(在本例中为65)并乘以100

fat = np.array([92.52, 0.06, 0.44, 0.0, 39.5])
fat_pct = (fat / 65) * 100
转换数据后,使用以下方法将其组装到数据框中:

import pandas as pd

df = pd.DataFrame([fat_pct, cal_pct, ...],
                  index=['fat (%)', 'calories (%)', ...],
                  columns=['A', 'B', ...])
现在,您可以使用
plot()
方法生成堆叠条形图,如下所示:

df.plot(kind='bar', stacked=True)

转换数据后创建堆叠条形图的另一种方法是将
bottom
关键字参数用于
plt.bar()
函数。这允许您设置放置条形图底部的值。要获得与图表相似的绘图,可以先绘制a组,然后绘制B组,将a组的值作为底部,然后绘制C组,将B组的值作为底部,等等。

很抱歉,这一定是建议的,我错误地单击了它。我不知道
R
对这个问题有什么帮助。非常感谢。你给了我一个很好的逻辑来实现这一点。但是我想要65作为100%的标记,这似乎有点难以添加到这个
df
中,因为它的列数不同。您可以使用
ax
关键字参数将matplotlib
axes
对象传递到
df.plot()
,然后在顶部绘制额外的条。