当plotfile使用时,Matplotlib中Subplot的奇怪行为

时间:2015-10-12 14:35:51

标签: python matplotlib

我有一个用于绘制子图的脚本,它非常适合绘制条形图。当我将此脚本与plotfile函数一起使用时,结果只是另一个上面的一个图。基本上它只显示第二个情节。这是什么原因?

import matplotlib
matplotlib.use('Agg')

import matplotlib.pylab as plt
import numpy as np
import matplotlib.ticker as mtick
from operator import add

matplotlib.rcParams.update({'font.size': 16})

fig = plt.figure(figsize=(11,10))
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.13, hspace=0.15)

ax1=fig.add_subplot(211)
plt.plotfile('2m_5m_stringsearch', delimiter=' ', cols=(0, 1), color='green', linewidth= 1.5, linestyle='-.',dashes=(5,8), marker='', label='stringsearch')
plt.ylim(0,1)
ax1.set_xticklabels([])
plt.ylabel('SER of Leon3-C1')

ax2=fig.add_subplot(212)
plt.plotfile('2m_5m_stringsearch', delimiter=' ', cols=(0, 1), color='green', linewidth= 1.5, linestyle='-.',dashes=(5,8), marker='', label='stringsearch')
plt.ylim(0,1)
ax2.set_xticklabels([])
plt.ylabel('SER of Leon3-C2')

plt.savefig("Output.pdf", dpi=400, bbox_inches='tight', pad_inches=0.05)

2 个答案:

答案 0 :(得分:1)

在查看pyplot.py包的内容后,我意识到plotfile函数与子图不能很好地连接:如果要将文件的多个列绘制到子图中,它很容易那样做。

如果你想任意地将多个(可能不同的)文件绘制到不同的子图中,那么它就不能。

我找到的解决方案是使用numpy genfromtxt通过编写我们自己的plot_file函数来自行读取数据:

import numpy as np
def plot_file(ax, fnme, cols=[], label=None):
    data = np.genfromtxt(
      fnme,
      skip_header=0,
      skip_footer=0,
      names=[str(col) for col in cols],
    )
    ax.plot(*[data[str(col)] for col in cols], label=label)

import matplotlib.pyplot as plt   
fig = plt.figure(figsize=(10, 3))
PLOT_INDEXES = range(0,2)
for i in PLOT_INDEXES:
    ax = plt.subplot(1, len(PLOT_INDEXES), i+1)
    plot_file(ax, 'test_{0}.txt'.format(i), cols=[0, 1], label=str(i))
plt.show()

答案 1 :(得分:0)

可能是因为this from the docs about the newfig argument

  

如果newfig为True,则该图总是以新的数字形成;如果   错误,如果存在,则在当前图中进行,否则在a中   新人物。

newfig默认为True。尝试将newfig=False传递给pylab.plotfile