5

So when I try to graph multiple subplots using pyplot.subplots I get something like:

Four subplots

How can I have:

  1. Multiple independent axes for every subplot
  2. Axes for every subplot
  3. Overlay plots in every subplot axes using subplots. I tried to do ((ax1,ax2),(ax3,ax4)) = subplots and then do ax1.plot twice, but as a result, neither of the two showed.

Code for the picture:

import string
import matplotlib
matplotlib.use('WX')

import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
from itertools import izip,chain


f,((ax1,ax2),(ax3,ax4)) = plt.subplots(2,2,sharex='col',sharey='row')

ax1.plot(range(10),2*np.arange(10))
ax2.plot(range(10),range(10))
ax3.plot(range(5),np.arange(5)*1000)
#pyplot.yscale('log')
#ax2.set_autoscaley_on(False)
#ax2.set_ylim([0,10])


plt.show()
ASGM
  • 11,051
  • 1
  • 32
  • 53
Eiyrioü von Kauyf
  • 4,481
  • 7
  • 32
  • 41
  • 1
    What version of matplotlib are you using? What do you mean by "_multiple_ independent axes for _every_ subplot"? Also, with "Axes along every subplot" do you mean that you want to have _independent_ axes (i.e. not sharing x- or y-axis with other subplots) for every subplot, where each subplot has ticklabels? What do you mean by "overlaying plots in every subplot axes using subplots"? **Please be specific**, and make sure it's easily understandable what you want to achieve. If you have any images etc. of what you want it to look like, please refer to them. – sodd May 24 '13 at 10:12
  • did you get this sorted out? – tacaswell Jun 05 '13 at 01:05

2 Answers2

7

Questions 1 & 2:

To accomplish this, explicitly set the subplots options sharex and sharey=False.

replace this line in the code for the desired results.

f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex=False, sharey=False)

Alternatively, those two options can be omitted altogether, as False is the default. (as noted by rubenvb below)

Question 3:

Here are two examples of adding secondary plots to two of the subplots:

(add this snippet before plt.show())

# add an additional line to the lower left subplot
ax3.plot(range(5), -1*np.arange(5)*1000)

# add a bar chart to the upper right subplot
width = 0.75       # the width of the bars
x = np.arange(2, 10, 2)
y = [3, 7, 2, 9]

rects1 = ax2.bar(x, y, width, color='r')

Subplots with independent axes, and "multiple" plots

William Miller
  • 9,839
  • 3
  • 25
  • 46
Drew
  • 6,311
  • 4
  • 44
  • 44
0

Don't tell it to share axes:

f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)

ax1.plot(range(10),2*np.arange(10))
ax2.plot(range(10),range(10))
ax3.plot(range(5),np.arange(5)*1000)

doc

tacaswell
  • 84,579
  • 22
  • 210
  • 199