2016-07-29 25 views
0

Ich habe eine Grafik in MATLAB, die ich in eine Colormap (Grafik unten) verwandeln möchte. In diesem Diagramm gibt es mehrere Liniensegmente, und ich möchte, dass jedes Liniensegment basierend auf einem bestimmten Wert, der dem Segment zugeordnet ist, farbig ist.MATLAB Farbkarte definiert durch Segmentwerte

Zum Beispiel:

Wert der Linie 1 = 800, plotten eine bestimmte Farbe

Wert der Linie 2 = 555, plotten eine bestimmte Farbe ... etc.

Weiß jemand, wie man das macht? Ich habe den Teil des Codes in mein Programm aufgenommen, der die Plots unten erstellt. Im Code möchte ich, dass die Farbe der Linie von ElementMap (i, 6) abhängt. Ich habe keine besondere Vorliebe für die Farben, solange ich weiß, welche Liniensegmente einen höheren Wert haben.

Dank

enter image description here

%% Plot   

for i = 1:length(ElementMap) 
    if ElementMap(i,6) < 1000 
     x = [ElementMap(i,1);ElementMap(i,3)]; 
     y = [ElementMap(i,2);ElementMap(i,4)]; 
     plot(x,y,['-','b','o']); 
     hold on; 
    end 
end 

Antwort

1

Sie können eine indizierte Farbe für jeden eindeutigen Wert in der 6. Spalte bestimmen und dann diese indizierte Farben in RGB-Farben konvertieren eine colormap Ihrer Wahl verwenden (hier verwenden wir parula). Geben Sie beim Plotten jeder Linie die Eigenschaft an.

% Get indices to use for the colormap 
[~, ~, ind] = unique(ElementMap(:,6)); 

% Create a colormap of the correct size 
cmap = parula(max(ind)); 

% Create a color for each plot 
colors = ind2rgb(ind, cmap); 

% Now plot everything 
for k = 1:size(ElementMap, 1) 
    x = [ElementMap(k,1);ElementMap(k,3)]; 
    y = [ElementMap(k,2);ElementMap(k,4)]; 
    plot(x,y, 'Marker', 'o', 'LineStyle', '-', 'Color', colors(k,:)); 
    hold on 
end 

Mit diesem Ansatz werden die Farben nicht notwendig Skala linear mit Ihren Daten, aber jeder eindeutiger Wert in ElementMap(:,6) wird durch eine andere Farbe und kleinere Werte dargestellt werden, von größeren Werten unterschieden werden.

Wenn Sie sich nicht für jedes Grundstück mit einem einzigartigen Wert interessieren, könnten Sie etwas wie das folgende tun, würde erhalten Sie eine lineare Zuordnung zwischen Ihren Farben und Werten.

values = ElementMap(:,6); 

% Assign an index to each 
ind = gray2ind(mat2gray(values)) 

% Create the colormap 
cmap = parula(numel(unique(inds))); 

% Create a color for each plot 
colors = ind2rgb(ind, cmap); 

% Now plot everything 
for k = 1:size(ElementMap, 1) 
    x = [ElementMap(k,1);ElementMap(k,3)]; 
    y = [ElementMap(k,2);ElementMap(k,4)]; 
    plot(x,y, 'Marker', 'o', 'LineStyle', '-', 'Color', colors(k,:)); 
    hold on 
end 

% Now create a colorbar 
colorbar() 

% Set the range of the colorbar 
set(gca, 'CLim', [min(values), max(values)]) 
+0

Vielen Dank. Das ist, was ich gesucht habe. Eine Folgefrage: Angenommen, ich möchte eine Farbleiste mit dem Plot einfügen. Wie lassen sich die Werte in der Farbleiste mit den Werten von ElementMap (:, 6) korrelieren? –

+0

@ GradyF.MathewsIv Das würde annehmen, dass Sie eine lineare Zuordnung zwischen den beiden hatten, was dies nicht tut (es sei denn, die Werte in 'ElementMap (:, 6)') sind gleichmäßig verteilt. – Suever

+0

@ GradyF.MathewsIv Ich fügte ein Beispiel wie Du könntest das mit einer Farbleiste machen – Suever