2017-03-24 5 views
-3

Ich benutze Matplotlib für meine Plots, finde ich toll, aber manchmal zu viel kompliziert. Hier ein Beispiel:wie man einfache und effiziente Plots auf Python macht

import matplotlib.pyplot as plt 
import numpy as np 

idx1 = -3 
idx2 = 3 

x = np.arange(-3, 3, 0.01) 
y = np.sin(np.pi*x*7)/(np.pi*x*7) 

major_ticks = np.arange(idx1, idx2, 1) 
minor_ticks = np.arange(idx1, idx2, 0.1) 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.set_ylim(-0.3, 1.2) 
ax.set_xlim(idx1, idx2) 
ax.set_xticks(major_ticks) 
ax.set_xticks(minor_ticks, minor = True) 
ax.grid(True, which = 'both') 
ax.tick_params(axis = 'x', labelsize = 18) 
ax.tick_params(axis = 'y', labelsize = 18) 

ax.plot(x, y) 
plt.show() 

Gibt es etwas auf matplotlib implementiert und/oder Seaborn, in dem ich nur all diese Ploteinstellungen nur als Argument einer Funktion zur Verfügung stellen kann? Es kann die Anzahl der Codezeilen erheblich reduzieren und das Schreiben und Verstehen des Skripts erleichtern.

+0

Es gibt keine Seaborn entspricht diesen Code, da Sie nichts hier plotten. Wenn du einfacher darüber sprichst, was genau meinst du damit? – ImportanceOfBeingErnest

Antwort

1

Matplotlib bietet eine objektorientierte API. Dies bedeutet, dass alle Elemente der Figur tatsächliche Objekte sind, für die man Eigenschaften erhalten und setzen kann und die leicht manipuliert werden können. Dies macht matplotlib so flexibel, dass es fast jedes gewünschte Plot produzieren kann.

Da ein Diagramm aus hundert oder mehr Elementen bestehen kann, würde eine Funktion, die dieselbe Flexibilität zulässt, diese Menge an möglichen Argumenten benötigen. Es ist nicht unbedingt einfacher, sich an alle möglichen Argumente einer Funktion als an alle möglichen Attribute einer Klasse zu erinnern.

Wenn Sie einen einzigen Funktionsaufruf verwenden, bedeutet dies nicht unbedingt, dass Sie weniger Zeichen eingeben müssen. Die Befehle würden nur anders angeordnet sein.

Darüber hinaus ermöglicht der objektorientierte Ansatz, Dinge getrennt zu halten. Einige Eigenschaften der Achsen, wie das Gitter oder die Achsenbeschriftungen, sind völlig unabhängig davon, was Sie für die Achsen zeichnen. Sie möchten also nicht die Xticks im Aufruf auf plot setzen, da sie einfach nicht verwandt sind und es sehr verwirrend sein kann, beim Zeichnen von zwei Zeilen in den gleichen Achsen die gleichen Ticklabels zu setzen. Auf der anderen Seite ist Matplotlib wirklich einfach. Um einen Plot zu erzeugen, benötigen Sie zwei Linien

import matplotlib.pyplot as plt 
plt.plot([1,2,3],[2,1,3]) 

die meisten Parameter setzt genau wie sie benötigt werden. Je mehr Sie dieses Diagramm anpassen möchten, desto mehr Einstellungen müssen Sie anwenden. Das ist in Ordnung, da der Benutzer selbst bestimmen kann, in welcher Tiefe er das Aussehen der Handlung kontrollieren will.

Die meisten Matplotlib-Codes können in drei Teile unterteilt werden.

  1. den Stil Einstellung
  2. den Plot erstellen
  3. Anpassen der Plot

den Stil im Falle des Codes Einstellung von der Frage zum Beispiel beinhaltet die Ticklabel-Größe und die Verwendung eines Rasters. Diese Eigenschaften können so eingestellt werden, wie es im Code gemacht wird, aber es kann in der Tat sein, dass man immer die gleichen Eigenschaften hier verwenden möchte und es lästig findet, die gleichen Parameter bei jeder Erstellung eines Plots einzugeben. Daher bietet matplotlib allgemeine Stileinstellungen, die als rcParams bezeichnet werden. Sie können am Anfang eines Skripts, z.B.

plt.rcParams['lines.linewidth'] = 2 
plt.rcParams['axes.grid '] = True 
plt.rcParams['axes.labelsize'] = 18 

und wird auf alle Plots innerhalb des Skripts angewendet. Es ist auch möglich, ein komplettes Stylesheet mit diesen Parametern zu definieren. Weitere Informationen finden Sie unter Customizing matplotlib article.
Es ist ebenso möglich, predefined stylesheets für bestimmte Anwendungen zu verwenden.
Einfaches Importieren import seaborn ist auch eine Möglichkeit, den Stil zu ändern.

Erstellen der Handlung kann nicht viel mehr vereinfacht werden. Es ist klar, dass man so viele Befehle zum Plotten benötigt, wie Punkte zum Plotten. Erstellen der Figur und Achsen wie

fig, ax = plt.subplots() 

speichert eine Zeile obwohl.

Ebenso ist keine Vereinfachung möglich, wenn Customizing Ticks oder Tickmarks erforderlich sind. Man kann jedoch in Erwägung ziehen, Tickers and Formatters für diesen Zweck zu verwenden.

Am Ende kann man natürlich überlegen, eine benutzerdefinierte Funktion zu schreiben, die viele dieser Aufgaben ausführt, aber jeder kann entscheiden, ob das für ihn nützlich ist.

0

Durchsuchen herum sah ich diese wabe page. Diese Codezeilen können viele Einstellungen zusammenzufassen

import matplotlib as mpl 
mpl.rc('lines', linewidth=2, color='r') 
Verwandte Themen