如何抓住pylab.semilogy数字?

时间:2014-04-03 17:27:50

标签: python python-2.7 graph matplotlib

如何抓住pylab的两个半月形图形?我尝试过使用pylab.hold(True),但它打开了两个不同的窗口,两次调用我的图形功能(我只需要一个窗口中的图形)。代码如下:

edit1 - 这里有更完整的代码,名称的更正使用:

(import pylab as pl)

编辑2:我需要保持两个连续调用图形功能的grafics: 调用模块中的图形:

graphics(pet, SNR_dB)
graphics(another_pet, SNR_dB)

使用pl.array和列表(具有相同的维度),例如: (生成的白色范围(0,18))

SNR_dB:  [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17]

Pe,用脚本中的另一个计算器生成:

Pe:  [0.29576000000000002, 0.24626000000000001, 0.19703999999999999, 0.15298, 0.11018, 0.074139999999999998, 0.04616, 0.024400000000000002, 0.01204, 0.0050000000000000001, 0.0018600000000000001, 0.00040000000000000002, 4.0000000000000003e-05, 0.0, 0.0, 0.0, 0.0, 0.0] 
[0.16062000000000001, 0.13156000000000001, 0.10384, 0.079699999999999993, 0.056710000000000003, 0.037859999999999998, 0.023400000000000001, 0.01222, 0.0060400000000000002, 0.0025000000000000001, 0.00093000000000000005, 0.00020000000000000001, 2.0000000000000002e-05, 0.0, 0.0, 0.0, 0.0, 0.0]

图形功能是:

def graphics(Pe, SNR_dB):

    pl.semilogy(SNR_dB, Pe[0],linewidth=1)
    pl.hold(True)
    pl.semilogy(SNR_dB, Pe[1],linewidth=2)
    pl.legend(('Symbol', 'bit'))

    pl.xlim([0, max(SNR_dB)])
    pl.ylim([1e-10,1])

    pl.title('Error vs SNR_dB')
    pl.grid(True)
    pl.xlabel('SNR_dB')
    pl.ylabel('Pe')
    pl.show()

这两个“图形”调用生成两个数字,每个调用一个。我需要的只是一个数字。我怎么办?

2 个答案:

答案 0 :(得分:0)

不惜一切代价避免pylab (只夸张一半)

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(SNR_dB, Pe_list[0],linewidth=1)
ax.plot(SNR_dB, Pe_list[1],linewidth=2)
ax.legend(('Symbol', 'bit'))

ax.set_yscale('log')
ax.set_xlim([0, max(SNR_dB)])
ax.set_ylim([1e-10,1])

ax.set_title('Error vs SNR_dB')
ax.set_xlabel('SNR_dB')
ax.set_ylabel('Pe')

ax.grid(True)

plt.show()

答案 1 :(得分:0)

[SOLVE]

使用此编辑(我不使用图形或显示,直到两次调用图形)

graphics(pet, SNR_dB)
graphics(another_pet, SNR_dB)
pl.show()

def graphics(Pe, SNR_dB):

    pl.semilogy(SNR_dB, Pe[0],linewidth=1)
    pl.semilogy(SNR_dB, Pe[1],linewidth=2)
    pl.legend(('Symbol', 'bit'))

    pl.xlim([0, max(SNR_dB)])
    pl.ylim([1e-10,1])

    pl.title('Error vs SNR_dB')
    pl.grid(True)
    pl.xlabel('SNR_dB')
    pl.ylabel('Pe')