我试图在一个图中绘制多个数据集。
当你只有一小部分时,通常的做法是:
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()
然而,这会打开一个绘图窗口,但会立即关闭它。 我做错了什么?
答案 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。 (我可能错了,但我会检查出来,如果有其他原因我会再次编辑我的答案)