title: plt.setp alternative for subplots or how to set text rotation on x axis for subplot
body: <p>I have this code in which I am able to control attributes like: range of x axis, title, xlabel, ylabel, legend, grid, rotation of text on x labels:</p>
  
  <pre><code>#!/usr/bin/python
  import datetime
  import numpy as np
  import matplotlib
  import matplotlib.pyplot as plt
  from matplotlib.widgets import Slider
  from matplotlib.dates import DateFormatter
  ############################################
  # generate data
  x = np.arange(0,10)
  y0 = np.arange(0,10)
  y1 = np.random.rand(10)
  y2 = np.random.rand(10)
  ############################################
  # initialize (sub)plot(s)
  fig, ax = plt.subplots()
  ############################################
  # width of x axis
  x_min_index = 0
  x_max_index = 3
  
  x_min = x[x_min_index]
  x_max = x[x_max_index]
  ############################################
  # create (sub)plot
  l, = plt.plot(x,y0, label="plot1a")
  l, = plt.plot(x,y1, label="plot1b")
  l, = plt.plot(x,y2, label="plot1c")
  
  # (sub)plot - set values
  plt.title("plot1")
  plt.xlabel('xlabel')
  plt.ylabel('ylabel')
  plt.legend()
  plt.grid()
  ############################################
  # apply for all (sub)plot(s)
  plt.subplots_adjust(bottom=0.25)
  ############################################
  # (sub)plot - get values
  # plt.axis(x_min, x_max, y_min, y_max)
  y_min = plt.axis()[2]
  y_max = plt.axis()[3]
  print y_min
  print y_max
  ############################################
  # (sub)plot - set values
  # change only x values
  # y values are set to same value
  # plt.axis([x_min, x_max, y_min, y_max])
  
  # (sub)plot - set values
  # change only x values
  plt.xlim(x_min, x_max)
  ############################################
  # (sub)plot - get values
  locs, labels = plt.xticks()
  print locs
  print labels
  ############################################
  # (sub)plot - set values
  plt.setp(labels, rotation=45)
  
  plt.show()
  </code></pre>
  
  <p>This code returns this figure:
  <img src="https://i.stack.imgur.com/PRv0E.png" alt="enter image description here"></p>
  
  <p>I want to be able to control all those attributes but create multiple subplots for, my attempt to this is here:</p>
  
  <pre><code>#!/usr/bin/python
  import datetime
  import numpy as np
  import matplotlib
  import matplotlib.pyplot as plt
  from matplotlib.widgets import Slider
  from matplotlib.dates import DateFormatter
  ############################################
  # generate data
  x = np.arange(0,10)
  y0 = np.arange(0,10)
  y1 = np.random.rand(10)
  y2 = np.random.rand(10)
  ############################################
  # initialize (sub)plot(s)
  fig, axarr = plt.subplots(2)
  
  # http://stackoverflow.com/questions/6541123/improve-subplot-size-spacing-with-many-subplots-in-matplotlib
  fig.tight_layout()
  ############################################
  # width of x axis
  x_min_index = 0
  x_max_index = 3
  
  x_min = x[x_min_index]
  x_max = x[x_max_index]
  ############################################
  # 1st (sub)plot
  line0 = axarr[0].plot(x,y1, label="plot1a")
  line0 = axarr[0].plot(x,y2, label="plot1b")
  line0 = axarr[0].legend()
  line0 = axarr[0].set_title('plot1')
  line0 = axarr[0].set_xlabel('xlabel1')
  line0 = axarr[0].set_ylabel('ylabel1')
  line0 = axarr[0].grid()
  ############################################
  # 2st (sub)plot
  line1 = axarr[1].plot(x,y0, label="plot2", color="red")
  line1 = axarr[1].legend()
  line1 = axarr[1].set_title('plot2')
  line1 = axarr[1].set_xlabel('xlabel2')
  line1 = axarr[1].set_ylabel('ylabel2')
  line1 = axarr[1].grid()
  ############################################
  # apply for all (sub)plot(s)
  plt.subplots_adjust(bottom=0.25)
  ############################################
  # OLD CODE
  # (sub)plot - get values
  # plt.axis(x_min, x_max, y_min, y_max)
  # y_min = plt.axis()[2]
  # y_max = plt.axis()[3]
  # print y_min
  # print y_max
  
  # NEW ALTERNATIVE
  l0_x_min, l0_x_max = axarr[0].get_xlim()
  l0_y_min, l0_y_max = axarr[0].get_ylim()
  
  l1_x_min, l1_x_max = axarr[1].get_xlim()
  l1_y_min, l1_y_max = axarr[1].get_ylim()
  
  print l0_x_min
  print l0_x_max
  print l0_y_min
  print l0_y_max
  
  print l1_x_min
  print l1_x_max
  print l1_y_min
  print l1_y_max
  ############################################
  # OLD CODE
  # (sub)plot - set values
  # change only x values
  # y values are set to same value
  # plt.axis([x_min, x_max, y_min, y_max])
  
  # (sub)plot - set values
  # change only x values
  # plt.xlim(x_min, x_max)
  
  # NEW ALTERNATIVE
  axarr[0].set_xlim(x_min, x_max)
  ############################################
  # OLD CODE
  # (sub)plot - get values
  # locs, labels = plt.xticks()
  # print locs
  # print labels
  
  # NEW ALTERNATIVE
  line0_xticks = axarr[0].get_xticks()
  line0_labels = axarr[0].get_xticklabels()
  print line0_xticks
  print line0_labels
  
  line1_xticks = axarr[1].get_xticks()
  line1_labels = axarr[1].get_xticklabels()
  print line1_xticks
  print line1_labels
  ############################################
  # OLD CODE
  # (sub)plot - set values
  # plt.setp(labels, rotation=45)
  
  # NEW ALTERNATIVE
  ############################################
  plt.show()
  </code></pre>
  
  <p>This code returns this figure:
  <img src="https://i.stack.imgur.com/9hqKl.png" alt="enter image description here"></p>
  
  <p>This code has an limitation because I cannot set the rotation of labels on x axis. I cannot find the proper method for subplots which will do this. So far I've figured out following methods which corresponds to each other:</p>
  
  <pre><code>PLOT                                    SUBPLOTS
  plt.axis()                              axarr[0].get_xlim(), axarr[0].get_ylim()
  plt.axis([x_min, x_max, y_min, y_max])  axarr[0].set_xlim(x_min, x_max), axarr[0].set_ylim(y_min, y_max)
  plt.xlim(x_min, x_max)                  axarr[0].set_xlim(x_min, x_max)
  plt.xticks()                            axarr[0].get_xticks(), axarr[0].get_xticklabels()
  plt.setp(labels, rotation=45)           ???
  plt.title("plot1")                      axarr[0].set_title('plot1')
  plt.grid()                              axarr[0].grid()
  plt.legend()                            axarr[0].legend()
  plt.xlabel('xlabel')                    axarr[0].set_xlabel('xlabel')
  plt.ylabel('xlabel')                    axarr[0].set_ylabel('xlabel')
  plt.plot(x,y, label="plot")             axarr[0].plot(x,y, label="plot")
  </code></pre>
  
  <p>Questions:</p>
  
  <ol>
  <li>Does similar table exists but for all corresponding methods between plots and subplots?</li>
  <li>Probably more philosophical question; why two different naming convention?</li>
  <li>I've created this table as an trial error by running the code under <code>ipdb</code>, hitting tab, and writing down the familiar names of methods. Is there a better way? I can imagine something that will compare the method return types, arguments etc.</li>
  <li>How can I find alternative for any method from one set in another?</li>
  <li>Finally, how to rotate x label under subplots?</li>
  </ol>