在python或excel中100%聚集和堆栈图表绘制

时间:2015-12-08 17:33:32

标签: python excel matplotlib

我想使用python或excel绘制图表(目前在excel中完成,但它没有做我想要实现的事情)。我会解释一下我目前做了什么, 我想在堆积和聚类条形图中绘制成分ABCDE的以下营养数据。下面是数据

enter image description here

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

我在excel中得到的是下面的内容。它将两个值都取为100%,因此无法进行比较。 enter image description here

我用油漆来绘制我真正想要展示的东西。(仅适用于胖吧) enter image description here

任何人都可以使用excel或Python帮助我(我也熟悉Python,我认为excel不能这样做)。非常感谢。

1 个答案:

答案 0 :(得分:0)

我首先建议将您的数据转换为百分比并将其放入pandas DataFrame。按照你的例子,这意味着将标记为'fat'的行作为一个数组,除以最大值(在这种情况下为65)并乘以100。

fat = np.array([92.52, 0.06, 0.44, 0.0, 39.5])
fat_pct = (fat / 65) * 100

获得转换后的数据后,请使用以下内容将其组合到DataFrame中:

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组的值作为底部,等等。