Visualise value and frequency of vector elements?
Mostra commenti meno recenti
Hi,
lets say I want to visualize which files take up the space on my hard drive. So I have collected the data an found the following vector which represents the whole capacity of my hdd
1 1 1 1 0 0 1 1 1 1 2 2 2 2
where 1 means this sector on my hdd is occupied by a file of type 1, 0 means unoccupied and 2 means occupied by file type 2.
Now I want to visualize this data. I'd like to represent the whole hdd as a bar of fixed size, the colour of the bar should represent the occupying file type. So at the first part of the bar is red (for type 1), than grey for type 0 then again red and the last part of it is blue for type 2.
How do I do this? I have tried stacked bars, but I didnt manage to stack them, when I'm only passing a one-dimensional vector.
Regards, Martin
Risposte (4)
John D'Errico
il 23 Mar 2014
Personally, I'd suggest a histogram as the best thing.
S = [1 1 1 1 0 0 1 1 1 1 2 2 2 2];
By the way, I'd suggest getting a bigger hard drive if that is all it holds. :) Are you using MATLAB on a Commodore 64 perhaps?
smem = unique(S)
smem =
0 1 2
C = histc(S,smem)
C =
2 8 4
bar(smem,C)

It seems like you want a simple, single bar though. If so, then patch is an easy solution. Just create a sequence of patches in a figure of the appropriate size.
Or just do a pie chart. You can add labels to each bin of the pie chart too.
pie(C)

Same result here--Looks like a bug to me...
Workaround I found was to create a 2xN array w/ the second row set to NaN. bar won't show the second bar but you'll then need to clean up the x-axis as it will still be labeled for two bars.
set(gca,'xtick',1)
xlim([0.4 1.6])
works to center the one bar.
Star Strider
il 23 Mar 2014
Modificato: Star Strider
il 23 Mar 2014
My suggestion:
FS = [1 1 1 1 0 0 1 1 1 1 2 2 2 2]
FV = ones(size(FS));
FZ = zeros(size(FS));
FS0 = FZ;
FS0(FS == 0) = 1;
FS1 = FZ;
FS1(FS == 1) = 1;
FS2 = FZ;
FS2(FS == 2) = 1;
figure(1)
barh(FV, 'b', 'BarWidth', 1.0)
hold on
barh(FS0, 'FaceColor',[0.9 0.9 0.9], 'BarWidth', 1.0)
barh(FS1, 'r', 'BarWidth', 1.0)
hold off
The FS0 ... FS2 lines look less than efficient. Experiment with the code and plot to get the sort of result you want.

Categorie
Scopri di più su Annotations in Centro assistenza e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!