我最近使用 PyNE 库 对复杂材料的放射性衰变进行建模。除其他之外,该库允许您将任意材料定义为字典,通过时间 t 进行衰变,然后它会返回一个新的材料字典,其中包含该时刻存在的种类及其浓度。对于一次操作,这很简单。但是,如果您想重复这个过程(衰变)多次,您将得到多个不同的字典。这些字典中的数据显示了放射性物质如何随时间演变(衰变)。
这很好,但我真正想做的是将每种物质作为时间函数绘制出来。但是,matplotlib 绘图不接受多个字典作为输入数据。
我的问题是,如何以 Pythonic 的方式重新排列多个字典,以便按照 matplotlib 绘图可以接受的格式显示每个物种随时间演变的情况?
让我举个例子。假设我的初始材料在 T0 时被定义,并由三种物种组成,每种物种量为1.0。我的初始字典将如下所示:
我们可以看到物种B已经衰变并产生了D,但是A和C没有。
现在让我们再次衰变到T2。
这很好,但我真正想做的是将每种物质作为时间函数绘制出来。但是,matplotlib 绘图不接受多个字典作为输入数据。
我的问题是,如何以 Pythonic 的方式重新排列多个字典,以便按照 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图形绘制不会将其作为输入参数。我需要的是一些东西,可以将所有A数据分组并根据时间绘制,将所有B数据分组并根据时间绘制,依此类推...
我的第一个想法是将其附加到2D列表中,其中列基本上是时间,行是物种。当这些被提取为向量时,它们很容易被绘制。然而,我认为对于半路出现的物种(如上面的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]]
关于如何以简洁的pythonic方式操作这些字典,从而使其更易于绘图,欢迎您提出任何想法。
马克