2017-11-14 2 views
3

Der Beispielcode Matlab kann nicht in Matlab 2017a (Linux 64bit) laufen: https://cn.mathworks.com/help/matlab/ref/bar.htmlMatlab: Bar Kein öffentliches Eigentum CData existiert

b = bar(rand(10,1)); 
b.FaceColor = 'flat'; 
b.CData(2,:) = [.5 0 .5]; 

Es kann nicht die spezifische bar Farbe und warnt wie:

Keine öffentliche Eigenschaft CData existiert für Klasse matlab.graphics.chart.primitive.Bar.

Ich weiß nicht, es ist ein bestimmtes Merkmal nur für Matlab 2017b?

Dieser Code dient nur zum Einfärben des spezifischen Balkens. In Matlab 2012a, kann es leicht geschehen durch:

bh=bar(MyStem); h=get(bh, 'children'); 
shading flat; set(h,'FaceVertexCData',MyColor); 

kann ich nicht verstehen, warum Matlab 2017 diese Funktion entfernt.

+1

'CData' eine neue Eigenschaft von 2017b ist. Wenn Sie nur die Farbe eines Balkens ändern möchten, gibt es hier einige gute Ideen: https://stackoverflow.com/questions/45568120/matlab-bars-changing-the-color-of-the-bar-and-the -space-between-bars-and-axes – Adiel

+0

Vielen Dank für Ihre schnelle Antwort und es ist peinlich vor Matlab 2017b, dass weder CData noch 'get (barHandle, 'Kinder')'. – Nico

Antwort

0

Über die CData Eigenschaft schrieb ich bereits im Kommentar. Wie auch immer, eine andere Abhilfe, die ich denken kann einfacher sein als diejenigen, die vorgeschlagen worden ist, kann das sein:

x=rand(1,10); 
b=bar([x;zeros(1,length(x))]); 
xlim([0.5 1.5]) 
set(b,'FaceColor','r') 
set(b(2),'FaceColor','b') 

enter image description here

Wenn Sie die Bars wie in einem normalen Balkendiagramm nummerieren möchten, können Sie fügen Sie diese:

set(gca,'XTick',0.5+[b.XOffset]) 
set(gca,'XTicklabels',1:length(x)) 

enter image description here

0

Sie erreichen, was Sie für wie diese suchen:

b = bar([rand(1,3);nan(1,3)],'b'); 
b(2).FaceColor = 'r'; 

Sie können dies auch erreichen, indem sie die Bar Funktion mehrmals mit verschiedenen Werten Aufruf (das ist eine Praxis, die man manchmal verwenden müssen) :

A = [1,2,3,4,1,3,2]; 

bar([1],A(1),'FaceColor','r'); 
bar([2:4],A(2:4),'FaceColor','g'); 
bar([5:7],A(5:7),'FaceColor','b'); 
+0

Vielen Dank für Ihre schnelle Antwort. Sicherlich ist dies ein Workaround, aber offensichtlich ist es eine SEHR SCHLECHTE Erfahrung vor Matlab 2017b. In einem normalen Matlab-Stil sollte es wie "bar" sein ([2: 4], A (2: 4), 'FaceColor', [1 0 0; 0 1 0; 0 0 1]); ', aber dies Zeit bin ich wirklich enttäuscht !! – Nico

+0

Was enttäuscht dich genau? Wenn Sie Ihre Arbeit freigeben müssen und sicherstellen, dass sie auf verschiedenen Matlab-Versionen läuft, können Sie immer eine Versionsprüfung durchführen ... –

+0

Ah ok Ich verstehe, nun, Sie können Ihre Änderungen beispielsweise für sehr große Graphen in eine Schleife zusammenfassen. –

Verwandte Themen