【问题标题】:100% clustered and stack chart plotting in python or excel在 python 或 excel 中 100% 聚集和堆栈图绘图
【发布时间】:2016-03-13 18:06:12
【问题描述】:

我想使用 python 或 excel 绘制图表(目前在 excel 中完成,但它没有做我想要实现的事情)。我将解释我目前所做的, 我想将以下成分的营养数据A,B,C,DE 绘制在堆叠和聚类的条形图中。下面是数据。

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 无法做到这一点)。非常感谢。

【问题讨论】:

  • 对不起,它一定是建议的,我错误地点击了它。我不知道R 对这个问题有帮助。

标签: python excel matplotlib


【解决方案1】:

我首先建议将您的数据转换为百分比并将其放入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)

转换数据后创建堆积条形图的另一种方法是使用plt.bar() 函数的bottom 关键字参数。这允许您设置放置栏底部的值。要获得一个看起来像您的图表的图,您可以绘制 A 组,然后以 A 组的值为底部绘制 B 组,以 B 组的值为底部绘制 C 组,等等。

【讨论】:

  • 非常感谢。你给了我一个很好的逻辑来实现这一点。但我希望将 65 作为 100% 标记,这似乎有点难以添加到 pandas df,因为其中的列数不同。
  • 您可以使用 ax 关键字参数将 matplotlib axes 对象传递给 df.plot(),然后在顶部绘制额外的条形图。
猜你喜欢
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多