WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Gleiche colorbar für 6 subplots

 

Kopi
Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 28.09.08
Wohnort: weit weg von der Heimat
Version: R2020b
     Beitrag Verfasst am: 18.10.2020, 20:50     Titel: Gleiche colorbar für 6 subplots
  Antworten mit Zitat      
Hallo,

die nächste Frage steht an. Ich habe den im Anhang befindlichen Plot gebastelt. Im Hintergrund sind die Radardaten und dadrüber sind die Gemeindegrenzen und Siedlungsflächen gelegt.

Ich schaffe es nicht alle subplots so mit der colorbar zu verlinken, dass die Farben in jedem Plot die gleiche Intensität (Niederschlagshöhe) haben.
Gleichzeitig würde ich gern die Radardaten tranzparenter gestalten und die Farben ändern. Das viele blau sieht zwar hübsch auf dem Computer aus aber beim drucken? Fehlender Niederschlag soll farblos werden und erst mit einem Niederschlag sollen Farben angezeigt werden.

Hat jemand eine Idee?

Die Uhrzeit wird automatisch aus dem Dateinamen ausgelesen.

Viele Grüße
Kopi

TEST.png
 Beschreibung:

Download
 Dateiname:  TEST.png
 Dateigröße:  112.37 KB
 Heruntergeladen:  219 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.10.2020, 21:01     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
die Farben in jedem Plot die gleiche Intensität (Niederschlagshöhe) haben.

caxis sollte helfen.

Zitat:
die Farben ändern.

colormap . Schau dir mal die Standard Colormaps an. hot passt z.B. ganz gut, nur dass du blau statt rot willst, aber das kann man ja entsprechend vertauschen.

Zitat:
tranzparenter gestalten

Welchen Befehl verwendest du denn? Bei einigen Befehlen gibt es die Eigenschaft FaceAlpha für Transparenz.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Kopi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 28.09.08
Wohnort: weit weg von der Heimat
Version: R2020b
     Beitrag Verfasst am: 18.10.2020, 21:13     Titel:
  Antworten mit Zitat      
Hallo Harald,

du bist sehr fleißig. Vielen Dank für die Tipps. Zu caxis habe ich gerade etwas gefunden.

Der Code ist nicht SEXY aber es funktioniert. Hätte gern mit einer Funktion gearbeitet aber pcolor wollte noch einen Z-Wert haben und damit gab es Probleme. Also habe ich nur den generierten Code als Vorlage genutzt.

Für die Diagramme bin ich wie folgt vorgegangen:
Code:
figure1 = figure('WindowState','maximized');
axes1 = axes('Parent',figure1,'Position',[0.1 0.50 0.25 0.35]);
hold(axes1,'on');
pcolor(X_ACHSE,Y_ACHSE,DATA);

xlim(axes1,[470000 490000]);
ylim(axes1,[5450000 5470000]);

set(axes1,'XTick',...
    [470000 475000 480000 485000 490000],...
    'XTickLabel',...
    {'','','','',''},'YTick',...
    [5450000 5455000 5460000 5465000 5470000],...
    'YTickLabel',...
    {'5.45','5.455','5.46','5.465','5.47'});
surface('DisplayName','data1','Parent',axes1,'ZData',ZData1,...
    'YData',Y_ACHSE,'XData',X_ACHSE,...
    'AlphaDataMapping','direct',...
    'AlignVertexCenters','on',...
    'EdgeColor','none',...
    'CData',DATA);
% Create ylabel, xlabel, title
ylabel({'Y-Koordinate  [m]'},'FontSize',12,'Interpreter','latex');
title([ Stunde ':' Minute ' Uhr'],'FontSize',14,'Interpreter','latex');
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Kopi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 28.09.08
Wohnort: weit weg von der Heimat
Version: R2020b
     Beitrag Verfasst am: 19.10.2020, 17:30     Titel:
  Antworten mit Zitat      
Update:

Die colorbar habe ich mit dem Befehl

Code:
set(axes1,'CLim',[0 7]);


für jedes Diagramm auf den gleichen Werte zwischen 0 und 7 gesetzt. axes1 wurde gegen axes2, ... bei jedem Diagramm natürlich ersetzt.

Dies scheint in meinem Fall zu funktionieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.10.2020, 18:39     Titel:
  Antworten mit Zitat      
Hallo,

das ist eine Alternative zu caxis, ja.
Statt axes1, axes2, etc. könntest du auch einen Vektor von Koordinatensystemen ax(1), ax(2) etc. erstellen. Dann sollte der set-Befehl direkt mit
Code:
gehen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Kopi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 28.09.08
Wohnort: weit weg von der Heimat
Version: R2020b
     Beitrag Verfasst am: 26.10.2020, 19:07     Titel:
  Antworten mit Zitat      
Ich bin's wieder.

Habe jetzt wieder etwas Zeit, um mich mit der widerspenstigen COLORBAR zu beschäftigen. In den Foren habe ich den folgenden Code gefunden und für meine Zwecke geändert.

Code:
cmap = [[0.5 1 0.5];[1 1 1];hot];
colormap(cmap);
cb=colorbar(axes3,'Position',[0.94 0.07 0.02 0.81],...
     'Ticks',[-1 0 1 2 3 4 5 6 7],...
     'TickLabels',{'NaN','0','1','2','3','4','5','6','7'},...
     'TickLabelInterpreter','latex');



Er funktioniert leider ganz nicht so wie ich es mir vorstelle.

Ich habe in meinem Datensatz an zwei Stellen keine Daten. Diese sollen farblich separat gekennzeichnet werden. Die Colorbar soll von unten nach ober erst NaN (z.B. Farbe: [0.5 0.5 0.5]), die Zahlen 0 mit weiß (Farbe: [1 1 1] ) und dann die Zahlen von 0.01-7 über "hot" anzeigen.

Welche Zahl welche Farbe bekommt, ist in der Variable cmap hinterlegt.
Leider springt die Colorbar intern scheinbar immer auf Ticks -1 und übernimmt diese Farbe als Null.

Solange in cmap, Ticks und TickLabels die NaN's nicht berücksichtigt werden, funktioniert es.

1. Warum meckert MatLab, wenn die Matrix der Farbpalette sowie Ticks und TickLabels erweitet werden?

2. Hat jemand eine Lösung, wie ich zu meinem Ziel gelangen kann?
Private Nachricht senden Benutzer-Profile anzeigen
 
Kopi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 28.09.08
Wohnort: weit weg von der Heimat
Version: R2020b
     Beitrag Verfasst am: 26.10.2020, 19:11     Titel:
  Antworten mit Zitat      
Idea Vielleicht sollte ich auch noch den Code

Code:
set(axes3,'CLim',[0 7]);


von 0 nach -1 anpassen. Exclamation Exclamation Exclamation Exclamation
Private Nachricht senden Benutzer-Profile anzeigen
 
Kopi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 28.09.08
Wohnort: weit weg von der Heimat
Version: R2020b
     Beitrag Verfasst am: 26.10.2020, 19:44     Titel:
  Antworten mit Zitat      
Mein Problem wird so nur teilweise gelöst. Zwischen -1 und 0 wird jetzt viel Farbe angezeigt. Die Farbpalette wird also auch in diesem Bereich interpoliert. Ich habe die -1 bereits auf -0.1 gesetzt. Leider ohne großen erfolg.
Der Abstand der Ticks auf Colorbar wird zwar angepasst, sodass zwischen -0.1 und 0 jetzt sehr wenig Platz ist (TickLabels 'NaN' und '0') aber das war's auch. Noch kleinere Abstände würden nur zu einer Überlagerung der TickLabels führen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.10.2020, 09:01     Titel:
  Antworten mit Zitat      
Hallo,

kannst du mal ein reproduzierbares Beispiel oder zumindest einen aktualisierten Screenshot zur Verfügung stellen? Das würde mir einen besseren Eindruck des momentanen Problems vermitteln.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Kopi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 28.09.08
Wohnort: weit weg von der Heimat
Version: R2020b
     Beitrag Verfasst am: 28.10.2020, 16:07     Titel:
  Antworten mit Zitat      
Hallo Harald,

habe deine Nachricht jetzt erst gesehen. Warum auch immer, kann ich derzeit E-Mails nur direkt bei meinem Provider einsehen?

Anbei die Datei und der Code den ich für das dritte Diagramm verwende. Mit diesem rufe ich die colorbar auf. Derzeit verwende ich wieder "jet".

Code:
%% FIGURE 3
    axes3 = axes('Parent',figure1,'Position',[0.66 0.5  0.27 0.38]);
    hold(axes3,'on');
    pcolor(X_ACHSE,Y_ACHSE,DATA);

    % Datenausschnitt für x-Richtung --> muss mit XTick und XTickLabel
    % übereinstimmen analog für y
    xlim(axes3,[470000 490000]);
    ylim(axes3,[5450000 5470000]);

    set(axes3,'XTick',...
        [470000 475000 480000 485000 490000],...
        'XTickLabel',...
        {'','','','',''},'YTick',...
        [5450000 5455000 5460000 5465000 5470000],...
        'YTickLabel',...
        {'','','','',''});
    surface('DisplayName','data1','Parent',axes3,'ZData',ZData1,...
        'YData',Y_ACHSE,'XData',X_ACHSE,...
        'AlphaDataMapping','direct',...
        'AlignVertexCenters','on',...
        'EdgeColor','none',...
        'CData',DATA);
    set(axes3,'CLim',[-0.1 7]); %Limits für colorbar

    title([Stunde ':' Minute ' Uhr'],'FontSize',14,'Interpreter','latex');
    cmap = [[0.5 1 0.5];[1 1 1];jet];
    colormap(cmap);
    cb=colorbar(axes3,'Position',[0.94 0.07 0.02 0.81],...
        'Ticks',[-0.1 0 1 2 3 4 5 6 7],...
        'TickLabels',{'NaN','0','1','2','3','4','5','6','7'},...
        'TickLabelInterpreter','latex');

    % Verwaltungseinheiten plotten: jedes Polygon in der shape-Datei muss
    % separat geladen werden
    for oo=1:4
    VE_axes=plot(VE_SHAPE(oo).X,VE_SHAPE(oo).Y);
    set(VE_axes,'Color','green');
    hold on
    end
    %Siedlungsgebiete plotten
    for gg=1:5
    SG_axes=plot(SG_SHAPE(gg).X,SG_SHAPE(gg).Y,'DisplayName',SG_SHAPE(gg).Name);
    set(SG_axes,'Color','red');
    hold on
    end
    %Gewässer
    for gg=1:3
    GE_axes=plot(GE_SHAPE(gg).X,GE_SHAPE(gg).Y);%,'DisplayName',GE_SHAPE(gg).Name);
    set(GE_axes,'Color','black');
    hold on
    end
    box(axes3,'on');
   
 


Viele Grüße
Kopi

test_NaN_colorbar.jpg
 Beschreibung:

Download
 Dateiname:  test_NaN_colorbar.jpg
 Dateigröße:  150.36 KB
 Heruntergeladen:  209 mal


Zuletzt bearbeitet von Kopi am 28.10.2020, 17:53, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2020, 17:13     Titel:
  Antworten mit Zitat      
Hallo,

ich bräuchte bitte ein reproduzierbares Beispiel (d.h. ich kann es komplett ausführen und das Ergebnis selbst erzeugen) oder einen Screenshot des aktuellen Standes.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2020, 19:52     Titel:
  Antworten mit Zitat      
Hallo,

und das Problem ist nun das viele Dunkelblau? Du hast ja die Colormap schon etwas angepasst. Das würde ich weiterführen, also z.B. jet als Basis verwenden, aber unten mehr weiß einfügen.
Alternativ kannst du CLim z.B. auf [0.5 7] setzen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Kopi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 28.09.08
Wohnort: weit weg von der Heimat
Version: R2020b
     Beitrag Verfasst am: 29.10.2020, 19:53     Titel:
  Antworten mit Zitat      
Hallo Harald,

wenn ich es richtig verstehe, gibt es keine Möglichkeit, einer colorbar separate Werte zuzuweisen und Werte zwischen denen Interpoliert werden soll. Die einzige Möglichkeit ist, eine zweit colorbar zu erzeugen und dieser nur einen Wert zuzuweisen und dann unter der erste Colorbar zu legen.

Ich werde dies mal ausprobieren.

Im Grunde sollen Werten kleiner 0 eine separate Farbe haben, Null soll weiß sein und alles darüber soll interpoliert werden.

Viele Grüße
Kopi
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.10.2020, 22:01     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Im Grunde sollen Werten kleiner 0 eine separate Farbe haben, Null soll weiß sein und alles darüber soll interpoliert werden.

Dann muss man die colormap entsprechend zusammensetzen. Das kann zwar etwas mühsam sein, das abhängig von CLim zu machen, aber sollte funktionieren.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Kopi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 28.09.08
Wohnort: weit weg von der Heimat
Version: R2020b
     Beitrag Verfasst am: 21.11.2020, 13:30     Titel:
  Antworten mit Zitat      
Hallo,

anbei meine Lösung für die Manipulation der Colorbar. Geholfen hat auch dieses kleine Video.

https://de.mathworks.com/videos/mod.....-interactively-97178.html

Code:

CLIM = [-1 7]; % Limits für Colorbar
NUM_NV = 5; %Anzahl der Zeilen die in der Colorbar für die Werte mit "No Values" vorgesehen sind. 5 wurden gewählt, weil diese gut sichtbar sind.
NO_VALUES=[]; % Werte in der Matrix löschen; Wichtig beim Suchen der richtigen Anzahl der Zeilen die manipuliert werden sollen
NO_VALUES(1:NUM_NV,1:3)=0.5;
DIFF = 38-NUM_NV; %Damit Werte mit Null die Farbe weiß erhalten darf die Gesamtzahl der Zeilen von -1 bis 0 nicht größer 38 sein, wenn ein CLIM von -1 bis 7 geht
NAN_COLOR=[];
NAN_COLOR(1:DIFF,1:3) = 1; %
cmap = [NO_VALUES;NAN_COLOR;jet]; % Colors für Colormap
 


In der Schleife für die Grafik wird die colorbar wie folgt aufgerufen:

Code:
       
colormap(cmap);
cb=colorbar(axes3,'Position',[0.94 0.07 0.02 0.81],...
'Ticks',[-1 0 1 2 3 4 5 6 7],...
'TickLabels',{'No Values','0','1','2','3','4','5','6','7'},...
'TickLabelInterpreter','latex');
 


Viele Grüße
Kopi

2003-05-31_14.jpg
 Beschreibung:

Download
 Dateiname:  2003-05-31_14.jpg
 Dateigröße:  309 KB
 Heruntergeladen:  185 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.