2012-01-12 12 views
7

Io lo uso per creare un grafico a barre:Come interrompere il barchart per nascondere le etichette per il valore dei dati 0 in Mathematica?

BarChart[ 
[email protected], 
BarOrigin -> Left, 
ChartLabels -> 
    Placed[{[email protected], [email protected]}, {Before, After}], 
ChartElementFunction -> "FadingRectangle" 
] 

Con data = {7, 10, 0, 6, 0, 3, 5} questo dà

Mathematica graphics

Il problema è che alcuni dei valori dei dati sono 0 e BarChart non sarà nemmeno aggiungere etichette per loro. Invece lascia uno spazio aperto. Come posso farlo aggiungere ancora le etichette anche se i valori sono 0?

questo è con Mathematica 8.

+0

possibilmente correlate: [Non ritaglio DiagrammaBarre quando si utilizza frame invece di assi] (http : //stackoverflow.com/questions/6557883/not-cropping-barchart-when-using-frame-instead-of-axes) – Szabolcs

+1

È una soluzione approssimativa, ma se non succede nulla di meglio, puoi fare 'BarChart [Rev erse [dati /. X_ /; x == 0 -> 10^-5], ... '(es. sostituisci gli zeri con piccoli numeri appena prima della stampa). Ho usato il modello 'x_ /; x == 0' per abbinare entrambi 0 e 0.0 ... Suppongo che 0 | 0.0 sia stato anche buono. – Szabolcs

risposta

6

Che dire

data = {7, 10, 0, 6, 0, 3, 5} 

labels = ("label " ~~ ToString[#]) & /@ data 

BarChart[[email protected], BarOrigin -> Left, 
ChartLabels -> Placed[{[email protected], [email protected]}, {Axis, After}], 
ChartElementFunction -> "FadingRectangle"] 

Sembra che "Prima" non si e "Asse" non funziona?

chart

+0

Questa sembra la soluzione più pulita, anche se perdi ancora le seconde etichette. –

3

L'approccio più semplice è quello di utilizzare un hack come data /. {(0|0.0) -> 0.00001}.

Penso che questo dovrebbe funzionare senza la necessità di un hack, quindi dovresti anche presentare un rapporto con [email protected]

+0

Mi rendo conto di aver commesso un errore durante la modifica di un set di dati campione e la trama nella domanda: il set di dati potrebbe essere numeri reali, quindi '0 | 0.0 -> 0.00001' o qualcosa di simile sarebbe meglio. – Szabolcs

+0

@Szabolcs Buon punto. Ho aggiunto il tuo approccio (dopo aver considerato brevemente 'PossibleZeroQ' ...) –

2

Il codice ai lavori di cui Mathematica 7 su Windows 7.

data = {7, 10, 0, 6, 0, 3, 5}; 

labels = Row[{"label",#}]& /@ data; 

BarChart[ 
    [email protected], 
    BarOrigin -> Left, 
    ChartLabels -> 
    Placed[{[email protected], [email protected]}, {Before, After}], 
    ChartElementFunction -> "FadingRectangle" 
] 

Mathematica graphics

+1

Suppongo che avrei dovuto specificare che sto usando Mathematica 8. –