在matplotlib图中以类似循环的方式生成新的plt.plot图

时间:2017-01-11 10:17:25

标签: python matplotlib plot

我试图在一个图中绘制多个数据集。

当你只有一小部分时,通常的做法是:

import matplotlib.pyplot as plt
y = [1,2,3,4]
x = range(len(y))
plt.plot(x,y)
plt.show()

在我的情况下,我试图绘制40个不同的列表,如y。显然

import matplotlib.pyplot as plt
y0 = [1,2,3,4]
y1 = [1,2,3,4]
:
:
y40 = [1,2,3,4]
x = range(len(y0))
plt.plot(x,y0)
plt.plot(x,y1)
:
:
plt.plot(x,y40)
plt.show()

这是一种非常愚蠢的方式......我的想法是编写一个我可以调用的函数:

import matplotlib.pyplot as plt

def plotter(y):
    x = range(len(y))
    plt.plot(x,y)
y = []
for i in range(40):
    y.append([1,2,3,4])
pl = plt.figure()    
for i in range(len(SNR)):
    plotter(y[i])

pl.show()

然而,这会打开一个绘图窗口,但会立即关闭它。 我做错了什么?

1 个答案:

答案 0 :(得分:1)

也许尝试类似的事情:

fig, ax1 = plt.subplots()    

def plotter(y):
    x = range(len(y)
    ax1.plot(y)

for i in range(len(SNR)):
    plotter(SNR[i])

plt.show()

如果需要,可以将轴对象传递到绘图仪功能中,以控制数据在图表上的绘制方式。

编辑:

回答有关将轴对象添加到函数中的问题。这将允许您在不同的轴上绘制不同的数据集。因此,如果图表上有两个Y轴,则可以传递第二个轴并将其绘制在右侧y轴上。你可以这样做:

fig, ax1 = plt.subplots()
ax2 = ax1.twinx()   

def plotter(y, axis):
    x = range(len(y)
    axis.plot(y)

datasetA = [1, 2, 3, 4, 5]
datasetB = [9, 8, 7, 6, 5]

plotter(datasetA, ax1)
plotter(datasetB, ax2)

plt.show()

这将绘制单独轴上的每个数据列表,如果需要,您可以将其合并到绘图循环中。

编辑:

回答有关您的情节立即关闭的问题。我不确定,但我认为plt.show()有一个block参数,可以阻止图表关闭。我不认为plot()为一个,或者默认设置为false。 (我可能错了,但我会检查出来,如果有其他原因我会再次编辑我的答案)