如何保持pylab.semilogy图形?
如何在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')