Grafici "bar" con valori sugli istogrammi

di il
5 risposte

Grafici "bar" con valori sugli istogrammi

Buongiorno a tutti!
Scrivo perché non riesco a inserire i valori sugli istogrammi di un grafico 'bar'.
Ho esigenza di stampare molti grafici, e salvarli a ogni iterazione, solo che mi manca il passaggio per inserire i valori sugli istogrammi.
Non si tratta di etichetta dati, né di leggenda dati o altro perché quelli già li inserisco, né voglio modificarlo manualmente, perché lo dovrei fare per centinaia di grafici e onestamente non ho né la voglia né il tempo.
C'è un modo?
Ecco un esempio del codice che ho inserito

% for i=1:52
%
% h=figure
% c = categorical({'1 lunedì','2 martedì','3 mercoledì','4 giovedì','5 venerdì','6 sabato','7 domenica'});
% bar(c,[A(:,i) maxx_A(:,i) meann_A(:,i)]);
% legend('Fabb. En.Frigor. [kWhf]','Pot. Frigor. Max [kWf]','Pot. Frigor. media [kWf]')
% title(['Energia Frigorifera - Settimana ',num2str(i)])
% grid on
% saveas(h,sprintf('EF_centro servizi_2018_settimana%d.png',i))
% end

Grazie mille!

5 Risposte

  • Re: Grafici "bar" con valori sugli istogrammi

    Hai provato a cercare on-line "matlab bar values on top"?

    https://it.mathworks.com/matlabcentral/answers/351875-how-to-plot-numbers-on-top-of-bar-graphs

    https://it.mathworks.com/matlabcentral/answers/40629-bar-plot-value-on-top

    https://it.mathworks.com/matlabcentral/answers/368045-how-do-i-put-in-a-bar-group-the-value-of-each-bar-on-top

    https://it.mathworks.com/matlabcentral/answers/351883-value-on-top-of-grouped-bar-graph

    https://it.mathworks.com/matlabcentral/answers/57836-how-to-print-the-values-of-each-bar-on-top-of-it-multibar-and-subplots

    https://it.mathworks.com/matlabcentral/answers/129900-data-labels-above-bars-on-grouped-bar-plot

    https://it.mathworks.com/matlabcentral/answers/433958-histogram-with-values-above-the-bars
  • Re: Grafici "bar" con valori sugli istogrammi

    Ho cercato millemila volte, ma non avevo trovato niente, per questo mi sono convinto a scrivere qui...
    sbagliavo le parole chiave evidentemente...grazie mille, adesso do' un'occhiata!
  • Re: Grafici "bar" con valori sugli istogrammi

    Visto che ci siamo, un altro dubbio che avevo ma spero di non rompere con questa richiesta dato che non ho trovato manco le parole chiavi per questo:
    per avere sugli assi il numero in formato non scientifico (quindi con la e9 ma intero c'è un modo? ho provato con format, ho fatto qualche tentativo ma alla fine me lo fa sempre in automatico.
    Ripeto comunque il problema principale era quello, quindi...grazie
  • Re: Grafici "bar" con valori sugli istogrammi

    Se i valori sugli assi vengono rappresentati nel grafico informato scientifico, probabilmente è perché si tratta di valori "molto grandi"; se è così, una volta convertiti nel formato "non-scientifico" risulteranno "molto lunghi" (avranno cioè molte cifre) e questo, probabilmente, renderà poco leggibile il grafico.

    Ad ogni modo, i valori riportati sugli assi, anche se "apparentemente" numerici sono stringhe di testo (cellarray) memorizzate nelle properties "xticklabel" e "yticklabel" degli assi.


    Se hai una release di MatLAb >= R2016b, puoi usare direttamente le funzioni xtickformat e ytickformat

    Nel caso tu abbia una versione precedente alla R2016b, per poterne modificare il formato bisogna:
    [*] acquisire il cellarray con le labels degli assi con la funzione "get" oppure con la "dot notation"; le labels sono campi dell'handle dell'axes
    [*] convertire i cellarray di stringhe in valori numerici con la funzione "str2num"
    [*] creare una stringa di caratteri con i valori numerici nel formato desiderato
    [*] convertire la stringa di caratteri in un cellarray
    [*] assegnare i cellarray come nuove labels degli assi (con la funzione "set" o con la "dot notation")

    Di seguito un esempio (testato con Octave)
    
    % Create x and y input data
    x=1e9:1e9:10e9
    y=x*2
    % Plot a bar chart
    bar(x,y)
    % Get the x and y ticklabels (they are cellarray of string)
    xt=get(gca,'xticklabel')
    yt=get(gca,'yticklabel')
    % Convert the cellarray of string to numbers
    xn=str2num(char(xt))
    yn=str2num(char(yt))
    % Write the numbers in the "standard" format (i. e. not "eng") in an array of characters
    sx=sprintf('%.0f ',xn)
    sy=sprintf('%.0f ',yn)
    % Split the string into a cellarray
    scx=strsplit(sx,' ')
    scy=strsplit(sy,' ')
    % Set the x and y ticklabels in the new format
    set(gca,'xticklabel',scx(1:end-1))
    set(gca,'yticklabel',scy(1:end-1))
    
    
  • Re: Grafici "bar" con valori sugli istogrammi

    Ciao a tutti, mi siete stati di enorme aiuto e vi ringrazio
    h risolto grazie a voi quasi tutti i problemi che avevo, me ne restano due..


    1)come dire a matlab che voglio i separatori delle migliaia in output? (esempio: 1000000 scritto come 1.000.000). per adesso ho ovviato dividendo nel titolo la num2str ulteriormente per 1000 e lasciando 3 cifre decimali, ma è una soluzione proprio da animale me ne rendo conto ahah
    2)come dire a matlab che accanto ai valori sulle barre voglio aggiungere l'unità di misura (esempio: invece di 1.2 voglio 1.2 MW)

    il codice è questo

    eeib2=figure;
    t=num2str(0.001*max(h32_elettrico_2018_def+h34_elettrico_2018_def)','%.2f');
    d1=categorical({'01 gennaio','02 febbraio','03 marzo','04 aprile','05 maggio','06 giugno','07 luglio','08 agosto','09 settembre','10 ottobre','11 novembre','12 dicembre'});
    b=bar(d1,0.001*sum(h32_elettrico_2018_def+h34_elettrico_2018_def),'green');
    b.FaceColor='#77AC30';
    ylim([0 max(0.001*sum(h32_elettrico_2018_def+h34_elettrico_2018_def))+50])
    text([1 2 3 4 5 6 7 8 9 10 11 12],0.001*sum(h32_elettrico_2018_def+h34_elettrico_2018_def)',t,'vert','bottom','horiz','center')
    title(['Fabbisogno elettrico H32+H34=',num2str(sum(0.000001*sum(h32_elettrico_2018_def+h34_elettrico_2018_def)),'%.3f'),' MWhe'])
    ylabel('[MWhe]')
    grid on

    ps spero di non essere di disturbo xD
    grazie ^^
Devi accedere o registrarti per scrivere nel forum
5 risposte