Neues in Matplotlib 1.5 (29. Okt. 2015)#
Hinweis
matplotlib 1.5 unterstützt Python 2.7, 3.4 und 3.5
Interaktive OO-Nutzung#
Alle Artists verfolgen nun, ob ihr interner Zustand geändert, aber noch nicht angezeigt wurde ('stale') durch einen Aufruf von draw. Es ist somit möglich, pragmatisch zu bestimmen, ob ein bestimmtes Figure in einer interaktiven Sitzung neu gezeichnet werden muss.
Zur Erleichterung der interaktiven Nutzung wurde der Methode draw_all von pyplot eine Methode hinzugefügt, die alle 'stalen' Figures neu zeichnet.
Um dies für die interaktive Nutzung bequem zu gestalten, registriert matplotlib nun entweder eine Funktion mit dem IPython-'post_execute'-Ereignis oder mit dem displayhook in der Standard-Python-REPL, um plt.draw_all automatisch aufzurufen, kurz bevor die Kontrolle an die REPL zurückgegeben wird. Dies stellt sicher, dass der draw-Befehl verzögert und nur einmal aufgerufen wird.
Das Ergebnis ist, dass für interaktive Backends (einschließlich %matplotlib notebook) im interaktiven Modus (mit plt.ion())
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ln, = ax.plot([0, 1, 4, 9, 16])
plt.show()
ln.set_color('g')
wird der Plot automatisch grün aktualisiert. Jede nachfolgende Änderung an den Artist-Objekten wird likewise aktualisiert.
Dies ist der erste Schritt einer größeren Konsolidierung und Vereinfachung der Pyplot-Interna.
Arbeiten mit beschrifteten Daten wie Pandas DataFrames#
Plot-Methoden, die Arrays als Eingabe nehmen, können nun auch mit beschrifteten Daten arbeiten und solche Daten entpacken.
Das bedeutet, dass die folgenden beiden Beispiele denselben Plot erzeugen
Beispiel
df = pandas.DataFrame({"var1":[1,2,3,4,5,6], "var2":[1,2,3,4,5,6]})
plt.plot(df["var1"], df["var2"])
Beispiel
plt.plot("var1", "var2", data=df)
Dies funktioniert für die meisten Plotting-Methoden, die Arrays/Sequenzen als Eingabe erwarten. data kann alles sein, was __getitem__ unterstützt (dict, pandas.DataFrame, h5py, ...) um Array-ähnliche Werte mit String-Schlüsseln zu greifen.
Zusätzlich wurden einige andere Änderungen vorgenommen, die das Arbeiten mit beschrifteten Daten (z.B. pandas.Series) erleichtern
Für Plotting-Methoden mit dem Schlüsselwortargument
labelwird eine der Dateneingaben als Label-Quelle bestimmt. Wenn der Benutzer keinlabelangibt, wird das Wertobjekt nach einem Label durchsucht, derzeit durch Suchen nach einemname-Attribut. Wenn das Wertobjekt keinname-Attribut hat, aber als Schlüssel in dasdata-Keyword-Argument eingegeben wurde, wird der Schlüssel verwendet. In den obigen Beispielen führt dies bei beiden Fällen zu einem implizitenlabel="var2".plot()verwendet nun den Index einerSeriesanstelle vonnp.arange(len(y)), wenn keinx-Argument übergeben wird.
Hinzugefügt axes.prop_cycle Schlüssel zu rcParams#
Dies ist eine allgemeinere Form des nun veralteten Parameters axes.color_cycle. Jetzt können mehr als nur Farben, sondern auch Linienarten, Schraffuren und fast jede andere Künstler-Eigenschaft zyklisch durchlaufen werden. Cycler-Notation wird zur Definition von Eigenschaftszyklen verwendet. Das Zusammenzählen von Cyclern ist so, als würden Sie zwei oder mehr Eigenschaftszyklen mit zip verbinden.
axes.prop_cycle: cycler('color', 'rgb') + cycler('lw', [1, 2, 3])
Sie können Cycler sogar multiplizieren, was so ist, als würden Sie itertools.product auf zwei oder mehr Eigenschaftszyklen anwenden.
Neue Colormaps#
Alle vier Colormaps, die als neue Standardwerte vorgeschlagen wurden, sind verfügbar als 'viridis' (der neue Standard in 2.0), 'magma', 'plasma' und 'inferno'
Stile#
Es wurden mehrere neue Stile hinzugefügt, darunter viele Stile aus dem Seaborn-Projekt. Darüber hinaus wurden zur Vorbereitung auf die kommende Release 2.0 mit Stiländerungen die Stile 'classic' und 'default' hinzugefügt. Für diese Release sind die Stile 'default' und 'classic' identisch. Durch deren Verwendung jetzt in Ihren Skripten können Sie einen reibungslosen Übergang bei zukünftigen Upgrades von Matplotlib sicherstellen, sodass Sie auf die schicken neuen Standardwerte umsteigen können, wenn Sie bereit sind!
import matplotlib.style
matplotlib.style.use('classic')
Der Stil 'default' liefert die neuesten Plotting-Stile von Matplotlib
matplotlib.style.use('default')
Backends#
Neue Backend-Auswahl#
Die Umgebungsvariable MPLBACKEND kann nun verwendet werden, um das Matplotlib-Backend festzulegen.
wx-Backend wurde aktualisiert#
Das wx-Backend kann nun sowohl mit wxPython classic als auch mit Phoenix verwendet werden.
wxPython classic muss mindestens Version 2.8.12 sein und funktioniert unter Python 2.x. Ab Mai 2015 ist keine offizielle Veröffentlichung von wxPython Phoenix verfügbar, aber ein aktueller Snapshot funktioniert unter Python 2.7+ und 3.4+.
Wenn Sie mehrere Versionen von wxPython installiert haben, ist der Benutzercode für die Festlegung der wxPython-Version verantwortlich. Wie dies gemacht wird, ist im Kommentar am Anfang des Beispiels Embed in wx #2 erklärt.
Konfiguration (rcParams)#
Einige Parameter wurden hinzugefügt, andere wurden verbessert.
Parameter |
Beschreibung |
|---|---|
|
mplot3d beachtet nun diese Attribute, die standardmäßig |
|
Standardabstand zwischen der Achse und der Beschriftung |
|
Standardlänge der Endkappen bei Fehlerbalken |
|
Standard-Sichtbarkeit von kleinen x/y-Ticks |
|
Standard-Transparenz des Legendenrahmenfeldes |
|
Standard-Füllfarbe des Legendenrahmenfeldes (oder |
|
Standard-Randfarbe des Legendenrahmenfeldes (oder |
|
Standard-Schriftgröße für Figure-Suptitel |
|
Standard-Schriftgewicht für Figure-Suptitel |
|
Ob ein Vektorgrafik-Backend mehrere Bilder zu einem einzigen Bild kompositieren soll oder nicht, wenn es gespeichert wird. Nützlich, wenn die Dateien weiter in Inkscape oder anderen Programmen bearbeitet werden müssen. |
|
Standard-Füllstil von Markern. Mögliche Werte sind |
|
Das Hinzufügen von |
Widgets#
Aktiver Zustand von Selektoren#
Alle Selektoren implementieren nun set_active und get_active Methoden (auch aufgerufen, wenn auf die Eigenschaft active zugegriffen wird), um korrekt zu aktualisieren und abzufragen, ob sie aktiv sind.
Methoden ignore, set_active und get_active in die Basisklasse Widget verschoben#
Schiebt duplizierte Methoden in Unterklassen in die Oberklasse, um Code-Duplizierung zu vermeiden.
Fügt eine Aktivierungs-/Deaktivierungsfunktion zu MultiCursor hinzu#
Ein MultiCursor-Objekt kann nach seiner Erstellung deaktiviert (und aktiviert) werden, ohne das Objekt zu zerstören. Beispiel
multi_cursor.active = False
Verbesserter RectangleSelector und neuer EllipseSelector Widget#
Fügt ein *interaktives* Schlüsselwort hinzu, das sichtbare Griffe zur Manipulation der Form nach dem Zeichnen aktiviert.
Fügt Tastaturmodifikatoren hinzu für
Verschieben der bestehenden Form (Standardtaste = 'space')
Erzeugen einer quadratischen Form (Standard 'shift')
Erzeugen des Ursprungspunkts als Mittelpunkt der Form (Standard 'control')
Quadratisch und zentriert können kombiniert werden
Künstler können Pixeldaten im Cursor anzeigen#
Fügt die Methoden get_cursor_data und format_cursor_data zu Künstlern hinzu, die verwendet werden können, um zdata zur Cursoranzeige in der Statusleiste hinzuzufügen. Fügt auch eine Implementierung für Bilder hinzu.
Neue Plotting-Funktionen#
Automatisches Umbrechen von Text#
Das Schlüsselwortargument "wrap" wurde zu Text hinzugefügt, das lange Textzeilen beim Zeichnen automatisch umbricht. Funktioniert für jeden gedrehten Text, verschiedene Ausrichtungsmodi und für Text, der sowohl Beschriftungen als auch Titel sind. Dies bricht an der Figure, nicht am Axes-Rand.
Eckenmaskierung für Konturplots#
Ian Thomas hat den C++-Code zur Berechnung von Konturen neu geschrieben, um die Unterstützung für Eckenmaskierung hinzuzufügen. Dies wird durch ein neues Schlüsselwortargument corner_mask in den Funktionen contour() und contourf() gesteuert. Das bisherige Verhalten, das nun mit corner_mask=False erzielt wird, war, dass ein einzelner maskierter Punkt alle vier Quadranten, die diesen Punkt berühren, vollständig maskiert hat. Das neue Verhalten, das mit corner_mask=True erzielt wird, maskiert nur die Ecken dieser Quadranten, die den Punkt berühren; dreieckige Ecken, die aus drei unmaskierten Punkten bestehen, werden wie üblich konturiert. Wenn das Schlüsselwortargument corner_mask nicht angegeben ist, wird der Standardwert aus den rcParams übernommen.
Vereinheitlichte Linienstile für Line2D, Patch und Collection#
Die Behandlung von Linienstilen für Linien, Patches und Sammlungen wurde vereinheitlicht. Nun unterstützen sie alle die Definition von Linienstilen mit kurzen Symbolen wie "--" sowie mit vollen Namen wie "dashed". Auch die Definition mit einem Strichmuster ((0., [3., 3.])) wird für alle Methoden unterstützt, die Line2D, Patch oder Collection verwenden.
Reihenfolge der Marker in der Legende#
Möglichkeit hinzugefügt, das Label vor dem Marker in einer Legendenbox mit dem Schlüsselwort markerfirst zu platzieren
Unterstützung für Legenden für PolyCollection und stackplot#
Es wurde ein legend_handler für PolyCollection sowie ein *labels*-Argument für stackplot() hinzugefügt.
Unterstützung für alternative Pivots in mplot3d Quiver-Plots#
Es wurde ein pivot-Keyword-Argument zu quiver hinzugefügt, das den Drehpunkt steuert, um den sich die Quiver-Linie dreht. Dies bestimmt auch die Platzierung der Pfeilspitze entlang der Quiver-Linie.
Logit-Skala#
Unterstützung für die 'logit'-Achsenskala hinzugefügt, eine nicht-lineare Transformation
für Daten zwischen 0 und 1 (exklusiv).
Hinzufügen von step-Keyword-Argumenten zu fill_between#
Das Schlüsselwort step wurde zu Axes.fill_between hinzugefügt, um das Füllen zwischen Linien zu ermöglichen, die mit dem 'step'-Zeichenstil gezeichnet wurden. Die Werte von step entsprechen denen des where-Schlüsselwortarguments von Axes.step. Die Asymmetrie der Keyword-Namen ist nicht ideal, aber Axes.fill_between hat bereits ein where-Keyword-Argument.
Dies ist besonders nützlich für die Darstellung von vorab gebinnten Histogrammen.
Quadratischer Plot#
Die Funktion für quadratische Plots wurde als neuer Parameter in der Achsenfunktion implementiert. Wenn das Argument 'square' angegeben ist, wird eine gleiche Skalierung eingestellt, und die Grenzen werden so gesetzt, dass xmax-xmin == ymax-ymin gilt.
Aktualisiertes figimage, um optionales resize-Parameter zu akzeptieren#
Die Möglichkeit hinzugefügt, einfache 2D-Arrays mit plt.figimage(X, resize=True) zu plotten. Dies ist nützlich für die Darstellung einfacher 2D-Arrays ohne Achsen oder Weißraum um das Bild.
Aktualisiertes Figure.savefig(), kann nun die DPI der Figure verwenden#
Unterstützung hinzugefügt, um die Figure mit derselben DPI wie die Figure auf dem Bildschirm zu speichern, mit dpi='figure'.
Beispiel
f = plt.figure(dpi=25) # dpi set to 25
S = plt.scatter([1,2,3],[4,5,6])
f.savefig('output.png', dpi='figure') # output savefig dpi set to 25 (same as figure)
Aktualisierte Tabelle zur Steuerung der Kantensichtbarkeit#
Es wurde die Möglichkeit hinzugefügt, die Sichtbarkeit von Linien in Tabellen umzuschalten. Funktionalität wurde der Factory-Funktion pyplot.table unter dem Schlüsselwortargument "edges" hinzugefügt. Werte können die Strings "open", "closed", "horizontal", "vertical" oder Kombinationen der Buchstaben "L", "R", "T", "B" sein, die links, rechts, oben bzw. unten darstellen.
Beispiel
table(..., edges="open") # No line visible
table(..., edges="closed") # All lines visible
table(..., edges="horizontal") # Only top and bottom lines visible
table(..., edges="LT") # Only left and top lines visible.
Unterstützung für r/cstride von Null in plot_wireframe#
Adam Hughes hat die Unterstützung für plot_wireframe von mplot3d hinzugefügt, um nur Zeilen- oder Spaltenlinien-Plots zu zeichnen.
Plot bar und barh mit Beschriftungen#
Es wurde das Keyword-Argument *tick_label* zu bar und barh hinzugefügt, um das Plotten von Balkendiagrammen mit einer Textbeschriftung für jeden Balken zu unterstützen.
Hinzugefügte Center- und Frame-Keywords zu pie#
Diese steuern, wo sich das Zentrum des Kreisdiagramms befindet und ob der Achsenrahmen angezeigt wird.
Fehlerhafte Polygon-Rendering bei 3D-gefüllten Konturplots behoben#
Bestimmte Fälle von 3D-gefüllten Konturplots, die Polygone mit mehreren Löchern erzeugen, führten zu fehlerhaftem Rendering aufgrund eines Verlusts an Pfadinformationen zwischen PolyCollection und Poly3DCollection. Eine Funktion set_verts_and_codes() wurde hinzugefügt, um die Beibehaltung von Pfadinformationen für korrektes Rendering zu ermöglichen.
Dichte Farbbalken werden rasterisiert#
Vektordateiformate (pdf, ps, svg) sind für viele Arten von Plot-Elementen effizient, aber für einige können sie zu übermäßiger Dateigröße und sogar zu Rendering-Artefakten führen, abhängig vom verwendeten Renderer für die Bildschirmanzeige. Dies ist ein Problem für Farbbalken, die eine große Anzahl von Schattierungen anzeigen, was meist der Fall ist. Wenn ein Farbbalken 50 oder mehr Farben anzeigt, wird er nun in Vektor-Backends rasterisiert.
DateFormatter strftime#
DateFormatter's __call__ Methode formatiert ein datetime.datetime-Objekt mit dem an den Konstruktor des Formatierers übergebenen Formatstring. Diese Methode akzeptiert Datumsangaben mit Jahren vor 1900, im Gegensatz zu datetime.datetime.strftime().
Artist-Level {get,set}_usetex für Text#
Fügen Sie {get,set}_usetex-Methoden zu Text-Objekten hinzu, die eine Künstlerebene-Steuerung des LaTeX-Renderings im Vergleich zum internen Mathtex-Rendering ermöglichen.
Axes.remove() funktioniert wie erwartet#
Wie bei Künstlern, die zu einer Axes hinzugefügt werden, können Axes-Objekte über remove() aus ihrer Figure entfernt werden.
API-Konsistenzkorrektur innerhalb der set_params()-Funktion von Locators#
Die Funktion set_params(), die Parameter innerhalb einer Instanz vom Typ Locator setzt, ist jetzt für alle Locator-Typen verfügbar. Die Implementierung verhindert auch eine unsichere Verwendung, indem sie die Parameter, die ein Benutzer festlegen kann, streng definiert.
Zur Verwendung rufen Sie set_params() für eine Locator-Instanz mit den gewünschten Argumenten auf
loc = matplotlib.ticker.LogLocator()
# Set given attributes for loc.
loc.set_params(numticks=8, numdecs=8, subs=[2.0], base=8)
# The below will error, as there is no such parameter for LogLocator
# named foo
# loc.set_params(foo='bar')
Datum-Locators#
Datum-Locators (abgeleitet von DateLocator) implementieren nun die Methode tick_values. Dies wird von allen Locators erwartet, die von Locator abgeleitet sind.
Die Datum-Locators können nun einfach ohne Erstellung von Achsen verwendet werden
from datetime import datetime
from matplotlib.dates import YearLocator
t0 = datetime(2002, 10, 9, 12, 10)
tf = datetime(2005, 10, 9, 12, 15)
loc = YearLocator()
values = loc.tick_values(t0, tf)
OffsetBoxes unterstützen nun das Clipping#
Artists zeichnen auf Objekte vom Typ OffsetBox über DrawingArea und TextArea. Der TextArea berechnet den benötigten Platz für den Text, sodass der Text immer innerhalb der Grenzen liegt, hier hat sich nichts geändert.
Jedoch fungiert DrawingArea als Elternteil für null oder mehr Artists, die darauf zeichnen und dies über die Grenzen hinaus tun können. Jetzt können untergeordnete Artists auf die Grenzen der DrawingArea zugeschnitten werden.
OffsetBoxes werden nun von tight_layout berücksichtigt#
Wenn tight_layout() oder Figure.tight_layout oder GridSpec.tight_layout() aufgerufen wird, werden OffsetBoxes, die außerhalb der Achsen verankert sind, nicht mehr abgeschnitten. Die OffsetBoxes werden bei mehreren Unterplots auch nicht von anderen Achsen überlagert.
Seitenweise PDF-Notizen in mehrseitigen PDFs (PdfPages)#
Fügen Sie der Klasse PdfPages eine neue Methode attach_note() hinzu, die das Anhängen einfacher Textnotizen an Seiten in mehrseitigen PDF-Dateien mit Figuren ermöglicht. Die neue Notiz ist in der Liste der PDF-Annotationen in einem Betrachter sichtbar, der diese Funktion bietet (Adobe Reader, OSX Preview, Skim usw.). Standardmäßig wird die Notiz selbst außerhalb der Seite gehalten, um zu verhindern, dass sie in Ausdrucken erscheint.
PdfPages.attach_note muss vor savefig aufgerufen werden, um der richtigen Figure hinzugefügt zu werden.
Aktualisiertes fignum_exists zur Übernahme des Figure-Namens#
Es wurde die Möglichkeit hinzugefügt, die Existenz einer Figure anhand ihres Namens anstelle nur der Figure-Nummer zu überprüfen. Beispiel
figure('figure')
fignum_exists('figure') #true
ToolManager#
Federico Ariza schrieb den neuen ToolManager, der NavigationToolbar2 ersetzt.
ToolManager bietet eine neue Sicht auf die Benutzerinteraktionen mit den Figuren. Zuvor hatten wir die NavigationToolbar2 mit eigenen Werkzeugen wie zoom/pan/home/save/... und auch Tastenkombinationen wie yscale/grid/quit/..... ToolManager verschiebt all diese Aktionen als Tools (befindet sich in backend_tools) und definiert eine Möglichkeit, auf sie zuzugreifen/sie auszulösen/sie neu zu konfigurieren.
Die Symbolleisten werden durch ToolContainerBases ersetzt, die nur grafische Schnittstellen zum Auslösen der Tools sind. Aber keine Sorge, die Standard-Backends enthalten eine ToolContainerBase namens toolbar.
Hinweis
Derzeit veröffentlichen wir dies hauptsächlich zu Feedbackzwecken und es sollte bis auf Weiteres als experimentell betrachtet werden, da API-Änderungen auftreten werden. Vorerst funktioniert der ToolManager nur mit den GTK3- und Tk-Backends. Stellen Sie sicher, dass Sie eines davon verwenden. Eine Portierung für die restlichen Backends ist bald verfügbar.
Um den ToolManager zu aktivieren, fügen Sie Folgendes am Anfang Ihrer Datei ein
>>> matplotlib.rcParams['toolbar'] = 'toolmanager'
Interaktion mit dem ToolContainer#
Das wichtigste Merkmal ist die einfache Neukonfiguration des ToolContainers (auch bekannt als Symbolleiste). Wenn wir zum Beispiel die Schaltfläche "vor" entfernen möchten, würden wir einfach tun:
>>> fig.canvas.manager.toolmanager.remove_tool('forward')
Wenn Sie nun die Schaltfläche "Home" programmatisch auslösen möchten
>>> fig.canvas.manager.toolmanager.trigger_tool('home')
Neue Tools für ToolManager#
Es ist möglich, dem ToolManager neue Werkzeuge hinzuzufügen
Ein sehr einfaches Werkzeug, das "You're awesome" ausgibt, wäre
from matplotlib.backend_tools import ToolBase
class AwesomeTool(ToolBase):
def trigger(self, *args, **kwargs):
print("You're awesome")
Um dieses Werkzeug zum ToolManager hinzuzufügen
>>> fig.canvas.manager.toolmanager.add_tool('Awesome', AwesomeTool)
Wenn wir eine Tastenkombination ("d") für das Werkzeug hinzufügen möchten
>>> fig.canvas.manager.toolmanager.update_keymap('Awesome', 'd')
Um es der Symbolleiste im Gruppennamen 'foo' hinzuzufügen
>>> fig.canvas.manager.toolbar.add_tool('Awesome', 'foo')
Es gibt eine zweite Art von Werkzeugen, "Toggleable Tools" (umschaltbare Werkzeuge). Diese sind fast gleich wie unsere grundlegenden Werkzeuge, nur dass sie zu einer Gruppe gehören und innerhalb dieser Gruppe gegenseitig ausschließend sind. Für von ToolToggleBase abgeleitete Werkzeuge gibt es zwei grundlegende Methoden: enable und disable, die automatisch aufgerufen werden, wenn sie umgeschaltet werden.
Ein vollständiges Beispiel finden Sie unter Tool Manager
cbook.is_sequence_of_strings erkennt Zeichenkettenobjekte#
Dies ist hauptsächlich die Art und Weise, wie Pandas eine Sequenz von Zeichenketten speichert
import pandas as pd
import matplotlib.cbook as cbook
a = np.array(['a', 'b', 'c'])
print(cbook.is_sequence_of_strings(a)) # True
a = np.array(['a', 'b', 'c'], dtype=object)
print(cbook.is_sequence_of_strings(a)) # True
s = pd.Series(['a', 'b', 'c'])
print(cbook.is_sequence_of_strings(s)) # True
Zuvor gaben die letzten beiden Ausgaben falsch zurück.
Neues Argument close-figs für die Plot-Direktive#
Matplotlib verfügt über eine Sphinx-Erweiterung namens plot_directive, die Plots für die Aufnahme in Sphinx-Dokumente erstellt. Matplotlib 1.5 fügt der Plot-Direktive eine neue Option hinzu: close-figs, die alle vorherigen Fenster mit Plots schließt, bevor die Plots erstellt werden. Dies kann dazu beitragen, überraschende Duplikate von Plots bei Verwendung von plot_directive zu vermeiden.
Unterstützung für URL-Zeichenkettenargumente für imread#
Die Funktion imread() akzeptiert jetzt URL-Zeichenketten, die auf entfernte PNG-Dateien verweisen. Dies umgeht die direkte Erzeugung eines HTTPResponse-Objekts.
Anzeigeprogramm für Animationen im IPython-Notebook#
Animation-Instanzen haben eine Methode _repr_html_ erhalten, um die Inline-Anzeige von Animationen im Notebook zu unterstützen. Die verwendete Methode zur Anzeige wird durch den rc-Parameter animation.html gesteuert, der derzeit die Werte none und html5 unterstützt. none ist der Standardwert, der keine Anzeige durchführt. html5 konvertiert die Animation in ein H.264-kodiertes Video, das direkt in das Notebook eingebettet wird.
Benutzer, die den _repr_html_-Anzeigeprogramm nicht verwenden möchten, können auch manuell die Methode to_html5_video aufrufen, um das HTML zu erhalten und es mit der HTML-Anzeigenklasse von IPython anzuzeigen.
from IPython.display import HTML
HTML(anim.to_html5_video())
Präfixiertes pkg-config für den Build#
Die Behandlung von pkg-config wurde so weit korrigiert, dass es nun über die Umgebungsvariable PKG_CONFIG gesetzt werden kann. Dies ist wichtig, wenn Ihre Toolchain präfixiert ist. Dies geschieht auf einfachere Weise als das Setzen von CC oder CXX vor dem Build. Ein Beispiel folgt
export PKG_CONFIG=x86_64-pc-linux-gnu-pkg-config