如何保持pylab.semilogy图形?

0 投票
2 回答
927 浏览
提问于 2025-04-18 01:13

如何在pylab的semilogy图形中同时显示两个图形呢?我试过使用pylab.hold(True),但这样会打开两个不同的窗口,因为我调用了两次我的图形函数(我需要在一个窗口中显示图形)。下面是代码:

编辑1 - 这是更完整的代码,还有名称使用的更正:

(import pylab as pl)

编辑2:我需要在两次连续调用图形函数时保持图形:

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

用一个pl.array和一个列表(它们的维度相同),例如: (用arange(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()

这两次调用“graphics”会生成两个图形,每次调用一个。我需要把它们放在同一个图形里。我该怎么做呢?

2 个回答

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()
0

[已解决]

通过这些修改(我在调用图形之前不使用figure或show)

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')

撰写回答