Verfasst am: 03.02.2013, 18:47
Titel: Fläche unter mehreren Graphen mit neg. u pos. Werten fülle
Hallo,
ich versuche schon seit Stunden eine Lösung für mein -eigentlich einfaches- Problem zu finden und bin so langsam am verzweifeln..
Ich habe 5 Datenreihen (siehe Anhang), die teils negative, teils positive Werte beinhalten. Diese möchte ich nun so darstellen, dass die Fläche unter der Kurve bis zur X-Achse für jede Datenreihe jeweils farblich ausgefüllt wird, sowohl für postitive, aus auch für negative Werte. Es soll in etwa so aussehen wie die angehängte Darstellung eines Batteriesystems!
Ich habe schon versucht das Ganze mit Area zu lösen aber irgendwie verschwindet immer eine der beide Datenreihen mit den negativen Werten. Wenn ich Bars nehme, habe ich das Problem, dass zwischen den Balken Abstände gesetzt werden..
Leider wird immer eine Reihe "verschluckt" bzw. nicht angezeigt. Es sollten ja 5 Reihen und auch Farben sein. Die Beschriftung der Daten stimmt wahrscheinlich auch deswegen nicht mit den Datenreihen überein..
Ich habe jetzt nochmal mein Glück mit einem Bar-Plot versucht, da ein AreaPlot nicht das Mittel der Wahl zu sein scheint.
Leider werden die Balken der Zeitreihen nebeneinander dargestellt. (siehe Anhang)
Gibt es auch eine Möglichkeit die Abstände auf Null zu setzen, so dass eine zusammenhängende Fläche entsteht?
Und kann man dann verschiedene dieser Flächen "übereinander" plotten, so dass z.B. Zeitreihe1 Zeitreihe2 verdeckt?
Dann hätte ich ja die gewünschte Darstellung
Anbei nochmal die Diagrammdaten. Diese habe ich einfach mit Rechtsklick "Bar plot" geplottet und eine Legende eingefügt.
Jetzt bin ich doch schon ein wenig weiter gekommen und habe das Problem mit mehreren Bar-Plots lösen können. Sogar das mit der Transparenz hat geklappt!
Nun möchte ich in das Diagramm noch eine zweite Y-Achse mit einem Line-Plot einfügen. Das funktioniert ja grundsätzlich mit "plotyy()".
Leider habe ich dann aber das Problem, dass ich nicht mehr auf die Eigenschaften der einzelnen Bars wie z.B. 'FaceAlpha' oder 'LineStyle' zugreifen kann.
Hier mal ein exemplatischer Code mit Bars und einer Line, der bis auf die Veränderung der Bar-Eigenschaften, funktioniert (Ergebnis im Anhang):
Weiß jemand wie ich meine 4 Datenreihen als Bar und eine Datenreihe als Line mit zwei verschiedenen Y-Achsen in einem Diagramm darstellen kann UND dabei noch die Eigenschaften der Bars verändern kann!?
Es gibt ja einen Handle aber irgendwie scheinen die Änderungen nicht zu greifen...
Mit viel googlen und dem Property-Editor bin ich nun fast am Ziel aber verzweilfle jetzt an einem Darstellungsproblem.
Aus irgendwelchen ominösen Gründen sind die Balken leicht versetzt, sodass es irgendwie seltsam aussieht. (siehe Anhang)
Keine Ahnung ob das an Matlab liegt oder an irgendeinder Eigenschaft. Habe schon alles bis auf nötigste reduziert aber keine Änderung zeigte eine Wirkung...
Kann mir da vielleicht jemand helfen? Bin ja jetzt fast am Ziel..
Hier mal der gesamte Code der Plot-Funktion:
Code:
function createfigure(ymatrix1, X1, Y1)
%CREATEFIGURE(YMATRIX1,X1,Y1) % YMATRIX1: bar matrix data % X1: vector of x data % Y1: vector of y data
% Auto-generated by MATLAB on 14-Feb-2013 13:51:03
% Create axes
axes1 = axes('Parent',figure1,...
'YTickLabel',{'-20 kW','-10 kW','0 kW','10 kW','20 kW'},...
'YTick',[-20-1001020],...
'YColor',[0.03921568627450980.1411764705882350.415686274509804],...
'XTick',[081624324048566472808896],...
'XTickLabel',[024681012141618202224],...
'FontName','Calibri');
%% Uncomment the following line to preserve the X-limits of the axes xlim(axes1,[096]);
%% Uncomment the following line to preserve the Y-limits of the axes ylim(axes1,[-2020]);
box(axes1,'on');
hold(axes1,'all');
% Speicher Netz Verbrauch Erzeugung % Create multiple lines using matrix input to bar
bar1 = bar(ymatrix1,'BarWidth',4,'Parent',axes1);
set(bar1(1),...
'FaceColor',[0.1647058823529410.3843137254901960.274509803921569],...
'DisplayName','Speicher');
set(bar1(2),'FaceColor',[0.870.490],'DisplayName','Netz');
set(bar1(3),...
'FaceColor',[0.03921568627450980.1411764705882350.415686274509804],...
'DisplayName','Stromverbrauch');
set(bar1(4),'FaceColor',[110],'DisplayName','PV-System');
% Create axes
axes2 = axes('Parent',figure1,...
'YTickLabel',{'','','','','0 %','25 %','50 %','75 %','100 %'},...
'YTick',[0510152025303540],...
'YMinorGrid','on',...
'YAxisLocation','right',...
'YColor',[0.1647058823529410.3843137254901960.274509803921569],...
'XTickLabel',['0';'2';'4';'6';'8';'10';'12';'14';'16';'18';'20';'22';'24'],...
'XTick',[081624324048566472808896],...
'FontName','Calibri',...
'Color','none');
%% Uncomment the following line to preserve the X-limits of the axes xlim(axes2,[096]);
%% Uncomment the following line to preserve the Y-limits of the axes ylim(axes2,[040]);
hold(axes2,'all');
Ich finde die Balken-Graphen häßlich. Der gepostete Code und die Problembeschreibungen sind sehr umfangreich und ich finde den eigentlichen Knackpunkt nicht, was aber auch an meinem Fieber liegen mag. Die Angaben der Farben mit so vielen Nachkommastellen macht mich ganz schockelig, da in der Darstellung dann doch nur 8 Bit pro Kanal zur Verfügung stehen. Dies wäre hübscher statt "[0.164705882352941 0.384313725490196 0.274509803921569]", aber genauso akkurat:
Statt eine teilweise Transparenz zu setzen, kann man die Flächen auch opaque zeichnet und nochmal die Umrisse mit gesetzter EdgeColor und ohne FaceColor nachzeichnen:
danke für die Antwort. Irgendwie bist du ja scheinbar in jedem meiner angelegten Threads aktiv
Also die Balkendarstellung habe ich gewählt weil ich nur Daten in Viertelstundenauflösung habe und keine stetige Funktion. Da sehen bei 24*4 Werten meiner Meinung nach Balken besser aus. Dabei sind die Farben völlig nebensächlich, da ich die eh später nochmal uniform mit einer colormap für alle Grafiken in meiner Arbeit ändere.
Mir geht es nur um den Versatz der Balken, der offensichtlich durch Einführung der zweiten Y-Achse verursacht wird. Vorher sah es ja wie im Anhang des Threads davor gepostet "normal" aus. Das kann doch nicht so schwer sein, oder!?
Grüße
Einstellungen und Berechtigungen
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
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.