MATLAB Ruft eine Liste von Farbkartennamen ab

8

Ich schreibe eine GUI, die von einer Benutzerauswahl von Colormaps nach Namen profitieren würde. Jedoch bin ich in einer Zwickmühle, in der ich nicht scheinen kann, programmatisch eine Liste der unterstützten Colormapnamen zu erhalten!

Während ich die Namen fest codieren konnte; Mein Code kann auf älteren Versionen von Matlab ausgeführt werden, die verschiedene Colormaps haben können. Mein Hauptanliegen ist die Colormap parula , die, wenn ich mich recht erinnere, in MATLAB 2014 nicht vorhanden war.

Irgendwelche Gedanken?

    
warpstack 11.05.2016, 14:01
quelle

6 Antworten

7

Alternativ können Sie sie auch fest codieren und eine if -Anweisung mit graphicsversion(fhandle) darauf haben.

  

Er gibt returns true zurück, wenn das Standardgrafiksystem das alte ist   Handle Grafiken eins.

Sie könnten auch versuchen, eine umfangreiche Liste zu erhalten, und dann prüfen, ob colormapname.m eine Datei in matlabroot\toolbox\matlab\graph3d ist. Wenn die Funktion dort ist, kommt die Colormap in dieser Version. Sie müssten dennoch eine umfangreiche Liste fest codieren.

BEARBEITEN: Wie @thewaywewalk vorschlägt, könnten Sie Contents.m in matlabroot\toolbox\matlab\graph3d und esearch für % Color maps. öffnen. Es enthält eine Liste der in der Version enthaltenen Colormaps. Im Jahr 2014b ist es in den Zeilen 29-48

    
Ander Biguri 11.05.2016, 14:18
quelle
4

Ich bin nicht 100% sicher, dass es in MATLAB funktioniert Wie @BillBokeey in den Kommentaren darauf hinweist, funktioniert das nicht in MATLAB, aber in Octave können Sie Folgendes verwenden:

%Vor%

Es wird ein Zellenarray mit Strings zurückgegeben, das alle gültigen Colormaps enthält.

%Vor%     
beaker 11.05.2016 14:09
quelle
4

Eine Möglichkeit, eine umfangreiche Liste verfügbarer Colormaps zu erhalten:

In matlabroot\help\matlab\ref finden Sie eine Vorschau aller verfügbaren Colormaps, deren Dateinamen die Form colormap_colormapname.png

haben

Um Ihre Liste zu erhalten, können Sie verwenden:

%Vor%

Dies gibt ein Zellenfeld mit einer Zeichenfolge aus, die die Namen der verfügbaren Farbdiagramme enthält.

Ziemlich hässlicher Hack, aber zumindest funktioniert es auf 2014b (Bitte überprüfen Sie es für Ihre Version, wenn Sie eine andere haben)

    
BillBokeey 11.05.2016 14:37
quelle
2

Ein anderer Weg (Hack) könnte sein, die Zeichenfolge aus der Funktion colormapeditor herauszuziehen:

%Vor%     
Dan 11.05.2016 14:46
quelle
1

Wenn alles fehlschlägt, können Sie die Callback-Routine versuchen:

%Vor%

In diesem Beispiel werden die freigegebenen Variablen CMapList - handle für das Popup-Menü - und Ax - Handle der Achsen - erwartet.

Beim Aufruf der Funktion wird versucht, die Colormap zu setzen. Wenn es fehlschlägt, legen Sie die Standardfarbpalette fest und entfernen Sie den problematischen Namen aus dem Menü.

Stellen Sie sicher, dass die ersten und letzten Farbzuordnungen keinen Fehler verursachen, andernfalls muss das CMapList update mit diesen Optionen umgehen.

Sie können auch davon profitieren, dass jede Colormap ihre eigene .m -Datei hat, so dass Sie nicht warten müssen, bis ein Fehler auftritt.

%Vor%

Dies wirft einen Punkt auf - Sie können Ihre eigenen Colormaps definieren und den Algorithmus dazu bringen, fehlende .m Dateien zu erzeugen ...

    
Crowley 11.05.2016 14:50
quelle
0

Da jede Funktion, die eine 3-Spalten-Matrix oder sogar eine .MAT-Datei mit einer cmap -Variable mit einer solchen Matrix zurückgibt, von colormap verwendet werden kann, ist es nicht sinnvoll, nach a zu fragen Liste aller "Colormaps".

Sie könnten exist (dh exist('parula', 'file') ) oder try Klauseln verwenden, um das Vorhandensein bestimmter Funktionen zu prüfen und sie als Colormaps in Ihrer GUI anzubieten, obwohl dies problematisch sein kann, wenn der Benutzer benutzerdefinierte Funktionen hat Funktionen mit demselben Namen, die keine Colormaps ergeben.

Ich habe Nutzer, die es lieben, völlig benutzerdefinierte Colormaps zu erstellen, die sie in MAT-Dateien speichern, also würde ich die Colormap zu einem anpassbaren Textfeld machen und eine Validierung durchführen, um sicherzustellen, dass es sich tatsächlich um eine gültige Colormap handelt. p>     

Ahmed Fasih 11.05.2016 20:20
quelle

Tags und Links