Turn off autoscale and optional subplots

I need to generate in some cases a subplot with two plots one on top of
the other, and in some other cases just one subplot.
So after some attempts I ended up with the ugliest code I've ever
written (maybe not) that you see below.

Is there a better way to do it?
I still didn't fully get how to get "rid" of the implicit global state
in matplotlib and use a more object/functional programming approach.

Anyway the second thing is that I'm not able to disable the autoscale, I
just would like to see the grid as it should be (geometrically).

It should just be matplotlib.pyplot.autoscale but in my version is not
present, isn't there another way?

Thanks a lot,
Andrea

--8<---------------cut here---------------start------------->8---
    def write_graph(self, output_file, title, show=False):
        def upper_graph():
            def draw_nodes(nlist, color):
                # this returns the list of all the patches, also from axes.patches
                nx.draw_networkx_nodes(self.graph, nodelist=nlist, pos=self.pos,
                                       node_color=color, node_size=700, alpha=0.6)

            draw_nodes(self.lands, 'red')
            draw_nodes(self.mobiles, 'green')
            simple_nodes = set(self.nodes) - set(self.lands + self.mobiles)
            draw_nodes(simple_nodes, 'blue')

            old_axes = plt.axis()
            sizes = old_axes[1] - old_axes[0], old_axes[3] - old_axes[2]
            offset = lambda x: int((float(x) / 10))
            new_axes = []

            for i in range(len(old_axes)):
                new_val = old_axes[i] + (((-1) ** (i + 1)) * offset(sizes[i % 2]))
                new_axes.append(new_val)
            plt.axis(new_axes)

            nx.draw_networkx_edges(self.graph, self.pos, edge_color='k', alpha=0.5)

            labels = dict((x, str(x)) for x in self.nodes)
            # for the landmarks also add its index
            for land in self.lands:
                labels[land] = "%d (%d)" % (land, self.lands.index(land))

            for recv in self.receivers:
                labels[recv] += " (R)"

            for send in self.senders:
                labels[send] += " (S)"

            nx.draw_networkx_labels(self.graph, self.pos, labels, font_size=8)

        plt.clf()
        plt.title(title)
        plt.xlabel("x")
        plt.ylabel("y")

        if show:
            upper_graph()
            plt.show()
        else:
            plt.subplot(211)
            upper_graph()
            plt.subplot(212)
            legend = self.coordinate_text()
            # remove useless ticks
            plt.xticks([])
            plt.yticks([])
            plt.text(0.05, 0, "\n".join(legend))
            plt.text(0.5, 0, str(self.event_buffer))

            plt.savefig(output_file)
--8<---------------cut here---------------end--------------->8---