【发布时间】:2016-03-17 23:44:23
【问题描述】:
我最近一直在使用PyNE library 模拟复杂材料的放射性衰变。除其他外,该库允许您将任意材料定义为字典,将其衰减到时间 t,然后它将返回一个新材料作为字典,其中包含当时存在的物种及其浓度。对于一次性操作来说,这很简单。但是,如果您想多次重复该过程(衰减),您最终会得到几个字典。这些字典中的数据显示了放射性物质如何随时间演化(衰变)。
这很好,但是,我真正想做的是将每个物种绘制为时间的函数。但是,matplotlib plot 不接受多个字典作为输入数据。
我的问题是,我怎样才能以 python 的方式重新排列多个字典,以显示每个物种随时间的演变,以 matplotlib 绘图可以接受的格式?
让我举个例子。假设我的初始材料在 T0 定义,由三个物种组成,每个物种的数量为 1.0。我最初的字典看起来像:
T0 = {A:1.0, B:1.0, C:1.0}
现在假设我将这种材料衰减到 T1,新材料可能是。
T1 = {A:1.0, B:0.35, C:1.0, D:0.75}
我们可以看到物种 B 已经腐烂产生了 D,但 A 和 C 没有。
现在让我们再次衰减到 T2
T2 = {A:0.9, C:0.8, D:1.0, E:0.1, F:0.2}
这一次物种 B 已经完全衰变为 D,而 A 和 C 已经开始衰变为 E 和 F。
现在显然我只展示了三个简单的案例。实际上,将有数百个词典,可能有数十个物种。在示例中,我想将 A、B、C、D、E 绘制为时间的函数。由于数据在每个时间步定义的单独字典中,Matplotlib plot 不会将其作为输入参数。我需要的是将所有 A 数据组合在一起并根据时间绘制,将所有 B 数据组合在一起并根据时间绘制等等......
我的第一个想法是附加到一个二维列表,其中基本上列是时间,行是物种。当提取到向量中时,这些可以很容易地绘制出来。但是我认为这对于出现在中途的物种来说可能很困难,例如上面的 D、E、F。您需要将它们设置为零,如下所示:
list = [['Time', T0, T1, T2],
['A', 1.0, 1.0, 0.9],
['B', 1.0, 0.35, 0.9],
['C', 1.0, 1.0, 0.8],
['D', 0.0, 0.0, 0.9],
['E, 0.0, 0.0, 0.9]]
任何关于如何以简洁的 Python 方式将这些字典操作成易于绘制的东西的想法将不胜感激。
标记
【问题讨论】:
标签: python python-2.7 dictionary matplotlib