3D绘图嵌套词典由不同长度的数组组成

时间:2014-07-24 18:48:45

标签: python dictionary matplotlib plot nested

我有一个嵌套字典,如下所示:

dictionary = {time: {pixels: {intensity}}}

len(time) = 65

len(pixels) = 6/time

len(intensity) = 6/pixel

需要明确的是,1次值 - > [1,2,3,4,5,6]像素值 - >每个像素值的子值是6个强度值。

示例:

dictionary = {time1 : {1: array([i11,i12,i13,i14,i15,i16]), 2: array([i21,i22,i23,i24,i25,i26]), 3: array([i31,i32,i33,i34,i35,i36]), 4: array([i41,i42,i43,i44,i45]), 5: array([i51,i52,i53,i54,i55,i56]), 6: array([i61,i62,i63,i64,i65,i66])}}

我的问题是, 如何在z轴上绘制这些值(3D绘图),在y和x值上绘制强度值和像素值(因为两者都是长度6)?

以下是我到目前为止所尝试的并且未成功:

   x = []
   y = []
   z = []
   for i in dictionary:
      z1 = i
      z.append(z1)
      x1 = dictionary[i].keys()
      x.append(x1)
      y1 = dictionary[i].values()
      y.append(y1)

   from mpl_toolkits.mplot3d import Axes3D
   fig = plt.figure()
   ax = Axes3D(fig)
   ax.plot(x, y, zs = 0, zdir='z', label='zs=0,zdir=z')

1 个答案:

答案 0 :(得分:0)

您的y是一个列表清单。如果使用列出的for循环,很容易看到错误。

更正后的代码:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

x, y, z = [], [], []

for tim, pixels in dictionary.items():
    for pixel, intensities in pixels.items():
        for intensity in intensities:
            x.append(intensity)
            y.append(pixel)
            z.append(tim)

fig = plt.figure()
ax = Axes3D(fig)
ax.plot(x, y, z, zdir='z')
ax.show()

使用示例:

使用简单数据集:

{1: {1: array([11, 12, 13, 14, 15, 16]), 2: array([21, 22, 23, 24, 25, 26]),
  3: array([31, 32, 33, 34, 35, 36]), 4: array([41, 42, 43, 44, 45]),
  5: array([51, 52, 53, 54, 55, 56]), 6: array([61, 62, 63, 64, 65, 66])},
 2: {1: array([71, 72, 73, 74, 75, 76]), 2: array([21, 22, 23, 24, 25, 26]),
  3: array([31, 32, 33, 34, 35, 36]), 4: array([41, 42, 43, 44, 45]),
  5: array([51, 52, 53, 54, 55, 56]), 6: array([61, 62, 63, 64, 65, 66])}}

这将导致: enter image description here