我想使用python或excel绘制图表(目前在excel中完成,但它没有做我想要实现的事情)。我会解释一下我目前做了什么,
我想在堆积和聚类条形图中绘制成分A
,B
,C
,D
和E
的以下营养数据。下面是数据
在列E
之后,它显示每种营养素的最大阈值。
我需要的是以下。我将用一个例子。考虑原始fat
,我们有5种成分,5种成分中的脂肪总量为92.52+0.06+0.44+0+39.05=132.07
。将其绘制在下图中的堆栈图中。但是,这已超过65的最大值。如果65被视为100%,则总脂肪列应显示203.18%,这高于最大值。像每个营养素一样,应该有两个堆叠的列,一个显示参考值,另一个显示当前计算的值。
我在excel中得到的是下面的内容。它将两个值都取为100%,因此无法进行比较。
任何人都可以使用excel或Python帮助我(我也熟悉Python,我认为excel不能这样做)。非常感谢。
答案 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组的值作为底部,等等。