Matplotlib:想要每行不同的情节

时间:2014-07-11 22:25:45

标签: python python-2.7 matplotlib plot

我想查看由浮点列表组成的列表,并为每个子列表创建不同的图,其中列表是y值,每个图中使用相同的x值。然后应将每个图保存到我的计算机中。

我正在使用matplotlib并保存数字 - 但是每个后续数字仍然具有用于在其之前生成数字的子列表的数据! (例如,我的第50个数字上有50行,但我只想要1.)如何解决这个问题?

这是我的代码:

#list contains y values in sublists
x = 91,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] #my x values, floats, same for each plot
#names[] is defined earlier, is a list of desired figure names


import matplotlib.pyplot as plt
g = 0
for sublist in list:
    y = sublist
    plt.plot(x,y)
    plt.title(names[g])
    g = g + 1
    plt.savefig(genes[g-1])

提前致谢!

1 个答案:

答案 0 :(得分:2)

你的plt.plot会在第一次运行时创建一个数字和轴。每次之后你都会在图中添加一个新行。

有不同的方法来处理这种情况。例如,您可以每次创建和关闭该图:

for sublist in list:
    y = sublist
    fig = plt.figure()
    plt.plot(x,y)
    plt.title(names[g])
    g = g + 1
    plt.savefig(genes[g-1])
    plt.close(fig)

这有点慢,即使只有几十个情节可能不是问题。

或者您只能更改每张图片的Y数据:

# create the first image as a template
l = plt.plot(x, list[0])
for sublist in list:
    l.set_ydata(sublist)
    plt.title(names[g])
    g = g + 1
    plt.savefig(genes[g-1])

在这种情况下,您只需更改每一轮的Y数据。

顺便说一下,我在代码中至少改变了以下几点:

  • 采用面向对象的方式使用matplotlib
  • 将名称list更改为els(list高度保留)
  • 有更好的方法来处理g(计数器)

您可以通过http://codereview.stackexchange.com展示代码获益。你可能会得到很多有价值的建议!