Plotbreiteneinstellungen in ipython notebook


80

Ich habe die folgenden Handlungen:

Tonsignale

Es würde schöner aussehen, wenn sie die gleiche Breite haben. Haben Sie eine Idee, wie es in ipython notebook gemacht wird, wenn ich es benutze %matplotlib inline?

AKTUALISIEREN:

Um beide Zahlen zu generieren, benutze ich folgende Funktionen:

import numpy as np
import matplotlib.pyplot as plt

def show_plots2d(title, plots, points, xlabel = '', ylabel = ''):
    """
    Shows 2D plot.

    Arguments:
        title : string
            Title of the plot.
        plots : array_like of pairs like array_like and array_like
            List of pairs,
            where first element is x axis and the second is the y axis.
        points : array_like of pairs like integer and integer
            List of pairs,
            where first element is x coordinate
            and the second is the y coordinate.
        xlabel : string
            Label of x axis
        ylabel : string
            Label of y axis
    """
    xv, yv = zip(*plots)
    y_exclNone = [y[y != np.array(None)] for y in yv]
    y_mins, y_maxs = zip(*
        [(float(min(y)), float(max(y))) for y in y_exclNone]
    )
    y_min = min(y_mins)
    y_max = max(y_maxs)
    y_amp = y_max - y_min
    plt.figure().suptitle(title)
    plt.axis(
        [xv[0][0], xv[0][-1], y_min - 0.3 * y_amp, y_max + 0.3 * y_amp]
    )
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    for x, y in plots:
        plt.plot(x, y)
    for x, y in points:
        plt.plot(x, y, 'bo')
    plt.show()

def show_plot3d(title, x, y, z, xlabel = '', ylabel = '', zlabel = ''):
    """
    Shows 3D plot.

    Arguments:
        title : string
            Title of the plot.
        x : array_like
            List of x coordinates
        y : array_like
            List of y coordinates
        z : array_like
            List of z coordinates
        xlabel : string
            Label of x axis
        ylabel : string
            Label of y axis
        zlabel : string
            Label of z axis
    """
    plt.figure().suptitle(title)
    plt.pcolormesh(x, y, z)
    plt.axis([x[0], x[-1], y[0], y[-1]])
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    plt.colorbar().set_label(zlabel)
    plt.show()

%matplotlib notebook
Grisaitis

Antworten:


80

Wenn Sie verwenden %pylab inline, können Sie (in einer neuen Zeile) den folgenden Befehl einfügen:

%pylab inline
pylab.rcParams['figure.figsize'] = (10, 6)

Dadurch werden alle Abbildungen in Ihrem Dokument (sofern nicht anders angegeben) auf die Größe eingestellt (10, 6), wobei der erste Eintrag die Breite und der zweite die Höhe ist.

Weitere Informationen finden Sie in diesem SO-Beitrag. https://stackoverflow.com/a/17231361/1419668


12
macht einfach figsize(10, 6)den Job und die Zeiten leichter zu merken.
Alleo

67

Wenn Sie sich nicht in einem Ipython-Notizbuch befinden (wie dem OP), können Sie die Größe auch einfach deklarieren, wenn Sie die Abbildung deklarieren:

width = 12
height = 12
plt.figure(figsize=(width, height))

4
Haben Sie eine Idee, in welchen Einheiten dies gemessen wird?
Martin Thoma

1
Einheiten sind Zoll, aber YMMV (die DPI Ihres Displays entspricht möglicherweise nicht den Annahmen von matplotlib). Dies funktioniert auch nicht in der OP-Umgebung, einem iPython Notebook!
Kochfelder

2
@hobs Welche Version von iPython Notebook verwenden Sie? es funktioniert für mich in Jupyter.
Ramon Martinez

1
Arbeitet für mich in emacs / ein 20161228.741
Ott Toomet

3
@hobs das funktioniert bei mir in ipython. Das Ipython meiner Site ist leicht gehackt, aber ich wäre sehr überrascht, wenn es nicht auch für generisches Ipython funktionieren würde.
Jonathan Mayer

67

So habe ich es gemacht:

%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (12, 9) # (w, h)

Sie können Ihre eigenen Größen definieren.


4
plt.rcParams["figure.figsize"] =(12,9) auch das funktioniert
Roman Kazakov
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.