Seite 1 von 1

Matplotlib und Subplotabstand - vertikal

Verfasst: Sonntag 6. März 2011, 12:40
von mathman
Mahlzeit :mrgreen:

ich stehe vor dem Problem,
dass ich 3 Subplots untereinander plotten möchte und
jedem Subplot einen Titel verpassen will.

Leider sind die Abstände so gering, dass der Titel vorn
der Achsenbeschriftung überdeckt wird.

Wie bekomme ich die weiter auseinander, so das man
den Titel lesen kann? Die Beispiele auf der Homepage
von Matplotlib konnten zur Lösung leider nicht beitragen :K

Bild

Code: Alles auswählen

def plot_schnittkraefte_vorspannung(string):
  # Plottet die Querkraft
  
  # String auspacken
  json = unpack(string)
  pv = numpy.array(json["pv"])
  ph = numpy.array(json["ph"])
  mcp = numpy.array(json["mcp"])
  x = numpy.array(json["x_plot_schnitt"])
  l1 = json["l1"]

  #Ausgabe als Plot
  #Plot  x,y
  
  s = StringIO()
  
  fig = Figure(figsize=(7,6))
  canvas = FigureCanvas(fig)
  
  ax1 = fig.add_subplot(311)
  ax1.plot(x, ph, label= "N", color = 'k')
  ax1.set_ylabel('Normalkraft [kN]', size='x-small')
  ax1.set_title('Normalkraft infolge Vorspannung', size='x-small')
  ax1.axhline(linewidth=1, color='k', linestyle='-')
  ax1.fill_between(x , 0, ph, where=ph<0, color = 'b', alpha=0.5)
  ax1.set_ylim(0,(numpy.amin(ph))*1.1) # Plot auf Traegerhoehe begrenzen
  ax1.grid()
  ax1.set_xlim(0,numpy.amax(x)) # Plot auf Traegerlenge begrenzen

  ax2 = fig.add_subplot(312)
  ax2.set_title('Querkraft infolge Vorspannung', size='x-small')
  ax2.set_ylabel('Querkraft [kN]', size='x-small')
  ax2.plot(x, pv, label= "V", color = 'k')
  ax2.axhline(linewidth=1, color='k', linestyle='-')
  ax2.axvline(x = l1, linewidth=2, color='k') # Lager
  ax2.fill_between(x, 0, pv, where=pv<=0, color = 'r', alpha=0.5)
  ax2.fill_between(x , 0, pv, where=pv>0, color = 'b', alpha=0.5)
  ax2.grid() # Gitternetz zeichnen
  ax2.set_xlim(0,numpy.amax(x)) # Plot auf Traegerlenge begrenzen
  
  ax3 = fig.add_subplot(313)
  ax3.set_ylabel('Momentenverlauf [kN]', size='x-small')
  ax3.set_xlabel('Laenge [m]', size='x-small')
  ax3.set_title('Momentenverlauf infolge Vorspannung', size='x-small')
  ax3.plot(x, mcp, label= "M", color = 'k')
  ax3.axhline(linewidth=1, color='k', linestyle='-')
  ax3.axvline(x = l1, linewidth=2, color='k') # Lager
  ax3.fill_between(x, 0, mcp, where=mcp>=0, color = 'r', alpha=0.5)
  ax3.fill_between(x , 0, mcp, where=mcp<0, color = 'b', alpha=0.5)
  ax3.grid() # Gitternetz zeichnen
  ax3.set_xlim(0,numpy.amax(x)) # Plot auf Traegerlenge begrenzen
  ax3.set_ylim(numpy.amax(mcp),numpy.amin(mcp)) # Plot auf Traegerhoehe begrenzen
  ax3.set_xlabel('Laenge [m]', size='x-small')
    
  canvas.print_figure(s, format='png')
  return s.getvalue()
Gruß

Re: Matplotlib und Subplotabstand - vertikal

Verfasst: Sonntag 6. März 2011, 13:59
von mushroom
subplot_adjust sollte bei den Abständen zwischen den subplots weiterhelfen.

Noch eine oberlehererhafte Bemerkung :-)

Die Angabe der Einheiten (typographisch) bei dir ist veraltet, besser ist: 'Querkraft / kN' oder 'Querkraft in kN'

Grüße
mushroom

Re: Matplotlib und Subplotabstand - vertikal (gelöst!)

Verfasst: Sonntag 6. März 2011, 15:31
von mathman
Vielen dank,

es funktioniert in dem man noch SubplotParms importiert

und dann im Plot diese rein schreibt

Code: Alles auswählen

fig = Figure(figsize=(7,6.5), subplotpars=SubplotParams(left=None, bottom=None, right=None, top=None, wspace=None, hspace=0.4))

Re: Matplotlib und Subplotabstand - vertikal

Verfasst: Sonntag 6. März 2011, 16:53
von gkuhl
@mathman: Alternativ kann man auch mit "Figure.add_axes(...)" die einzelnen "Axes" manuell setzen.

@mushroom: Einheiten in eckige Klammern zu setzen, ist manchmal ungern gesehen, weil "[Kraft] = 1 Newton" eigentlich bedeutet, dass die Einheit der Kraft "1 Newton" ist. Der Ausdruck "Kraft [Newton]" ist mit dieser Definition im Hinterkopf dann etwas seltsam. Ich habe mal durch einige Paper geblättert, und hier und da findet man durchaus Einheiten in eckigen Klammern. Sehr viel häufiger werden aber runde Klammern verwendet; also "Kraft (Newton)".

Meiner Meinung ist es doch völlig egal, wie man die Einheiten hinschreibt. Wichtig ist das immer sofort klar ist, was hier gemeint ist. Viel schlimmer ist es, wenn Diagramme unzureichend beschriftet sind, und man raten muss, was hier eigentlich abgebildet ist. Aus dem Titel "Querkraft infolge Vorspannung" kann ich, ohne Hintergrundwissen, nicht verstehen, was dort abgebildet sein soll.

Grüße
Gerrit