Czy można połączyć wiele pionowych histogramów w Matlab w jeden? Podobnie jak załączony arkusz Excela ( https://drive.google.com /file/d/1H_mbyrIoln3XrnK1hLajnVNBKn13y_np/view?usp=udostępnianie )

Chcę utworzyć wykres wielu pionowych wykresów histogramu w jedną figurę, importując pliki Excela, gdzie na osi y ma wysokość, oś x odległość między pionowymi liniami histogramu a długością słupków histogramu jest równa wartości w arkuszu Excela. Wysokość każdego słupka w pionie wynosi 5.

Czy to w ogóle możliwe? Muszę postawić kilka warunków, aby Matlab wiedział, gdzie kreślić, ale czy ktoś mógłby mi pokazać podstawową metodologię?

Pomoc byłaby bardzo doceniana!

enter image description here

0
ursmooth 1 listopad 2018, 20:10

1 odpowiedź

Najlepsza odpowiedź

Problem polega na tym, że rodzicem obiektu Baseline jest Axis, co uniemożliwia nam zrobienie czegoś takiego

barh(bins1,counts1,'Basevalue',baseline1); hold on;
barh(bins2,counts2,'Basevalue',baseline2); hold off;

Ponieważ wykresy będą automatycznie współdzielić drugi zestaw wartości bazowych. Może istnieć obejście tego problemu, którego nie znam, więc zapraszam każdego, kto go zna, aby pokazał mi, jak to się robi.

Na razie udało mi się powtórzyć fabułę, której zdjęcie zamieściłeś, w znacznie mniej elegancki sposób. Zamieszczę kod poniżej, ale zanim to zrobię, chciałbym polemizować z wykorzystaniem takiej fabuły. Dlaczego? Ponieważ uważam, że jest to mylące, ponieważ oś x odnosi się zarówno do numeru działki, jak i liczby pojemników. W rzeczywistości próbujesz wyświetlić zestaw danych 3D, którego trzy wymiary to pojemniki, liczba pojemników i „liczba histogramu”. Istnieje mnóstwo metod wyświetlania danych 3D, a seria histogramów 2D może nie być najlepszym sposobem.

Biorąc to pod uwagę, oto kod, który mniej więcej tworzy powyższy obraz, zgodnie z obietnicą. Wszelkie zmiany, które możesz wprowadzić, będą bardziej kłopotliwe niż zwykle :-)

testData = randn(10000,1);      % Generate some data
[counts,bins] = hist(testData); % Bin the data

% First histogram
baseline1 = 0;
p1=subplot(1,3,1); barh(bins,counts,'BaseValue',baseline1); 
xticks(baseline1); xticklabels({0}); % Graph number on x axis at baseline (0)
box off;          % Remove box on right side of plot
ylabel('Property');

% Second histogram
baseline2 = max(counts)*1.2;
sepdist = baseline2-baseline1;      % Distance that separates two baselines
counts2 = baseline2 + counts;
p2=subplot(1,3,2); barh(bins,counts2,'BaseValue',baseline2)
xticks(baseline2); xticklabels({1}); % Graph number on x axis at baseline
box off;
Y=gca; Y.YAxis.Visible='off';
p1p=p1.Position; p2p=p2.Position;
p2p(1)=p1p(1)+p1p(3); p2.Position=p2p; % Move subplot so they touch

% Third histogram
baseline3 = baseline2 + sepdist;
counts3 = baseline3+counts;
p3=subplot(1,3,3); barh(bins,counts3,'BaseValue',baseline3)
xticks(baseline3); xticklabels({2});
Y=gca; Y.YAxis.Visible='off';
box off
p3p=p3.Position;
p3p(1)=p2p(1)+p2p(3); p3.Position=p3p;

% Add x-label when you are done:
xl=xlabel('Test xlabel'); xl.Units='normalized';

% Fiddle around with xl.Position(1) until you find a good centering:
xl.Position(1) = -0.49;

Wynik:

Result

2
Floris 2 listopad 2018, 11:31